Forum de la communauté SFML

Aide => Graphique => Discussion démarrée par: Destroyers le Avril 08, 2012, 12:22:26 pm

Titre: SFML 1.6 : effacer un Sprite et un sf::String
Posté par: Destroyers 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.
Titre: Re : SFML 1.6 : effacer un Sprite et un sf::String
Posté par: Laurent 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 ?
Titre: Re : SFML 1.6 : effacer un Sprite et un sf::String
Posté par: Destroyers 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 ?
Titre: Re : SFML 1.6 : effacer un Sprite et un sf::String
Posté par: Laurent 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 :)