Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: SFML 1.6 : effacer un Sprite et un sf::String  (Lu 4729 fois)

0 Membres et 1 Invité sur ce sujet

Destroyers

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
SFML 1.6 : effacer un Sprite et un sf::String
« le: Avril 08, 2012, 12:22:26 pm »
bonjour à tous.

Mon problème est simple, mais pertinent: comment on efface un Sprite d'une fenêtre ?
Je ne tiens bien-sur pas à utiliser Clear() puisque je veux que tout les autres Sprites de la fenêtre restent intactes.
Quand je dis effacer un Sprite, il faut bien-sur qu'il soit remplacé par l'image de fond, pour pas laisser un trous :)
Quand je parle de Sprite, je parle en fait de tout objet affichable.

Vous comprenez ?

Autre problème:

toutes les secondes, j'affiche les FPS de ma fenêtre via un sf::String.
Or, voilà ce qui est affiché:
1er seconde: 60
2e seconde: 6060
3e seconde 606060
4e seconde 60606060
etc...

La question est donc, comment on peut vider le contenu d'un sf::String pour le remettre à 0 ?
Et bien sur comment peut on l'effacer de la fenêtre ? mais la question est déjà posée au dessus ;)

Merci.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : SFML 1.6 : effacer un Sprite et un sf::String
« Réponse #1 le: Avril 08, 2012, 06:17:50 pm »
Citer
Mon problème est simple, mais pertinent
En fait non, il n'est pas pertinent : il ne faut pas chercher à effacer, il faut plutôt tout réafficher à chaque tour de boucle. Dis toi que chaque rafraîchissement doit être indépendant, il ne reste rien entre deux affichages successifs.

Citer
La question est donc, comment on peut vider le contenu d'un sf::String pour le remettre à 0 ?
Tu fais str = au lieu de str +=.

Mais j'ai l'impression que tu utilises un std::ostringstream et que c'est lui que tu ne vides pas (oss.str("")), non ?
Laurent Gomila - SFML developer

Destroyers

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : SFML 1.6 : effacer un Sprite et un sf::String
« Réponse #2 le: Avril 08, 2012, 07:15:32 pm »
Ah ouais je me disais aussi, que c'était compliqué. j'avais pas pensé a tout ré-afficher a chaque fois ^^

Oui tu as raison, c'est un std::ostringstream que je ne vide pas, et en réalité, c'est la 1ère fois de ma vie que je l'utilise en 2 ans de programmation lol, du coups, si on pouvais me dire comment on vide un std::ostringstream, ça m'arrangerai :)

Merci


EDIT: si il y a beaucoup d'objet à afficher, ça doit avoir un gros impacte sur la performance, non ?
« Modifié: Avril 08, 2012, 07:27:04 pm par Destroyers »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : SFML 1.6 : effacer un Sprite et un sf::String
« Réponse #3 le: Avril 08, 2012, 07:44:09 pm »
Citer
si on pouvais me dire comment on vide un std::ostringstream, ça m'arrangerai
Ca c'est le genre de truc qu'on trouve facilement sur Google :P
oss.str("");
Mais tu ferais mieux de te faire une fonction, ce sera plus pratique :
template <typename T>
std::string to_string(T value)
{
    std::ostringstream oss;
    oss << value;
    return oss.str();
}

Citer
si il y a beaucoup d'objet à afficher, ça doit avoir un gros impacte sur la performance, non ?
Plus de choses à afficher ça prend forcément plus de temps, c'est mathématique. Mais fort heureusement, comme tout le monde, y compris les cartes graphiques, fonctionne comme ça, ça ne pose pas problème :)
Laurent Gomila - SFML developer