Forum de la communauté SFML

Aide => Graphique => Discussion démarrée par: Syntax Error le Décembre 22, 2012, 10:34:52 pm

Titre: [SFML 2.0 RC] Problème fluidité causé par sf::Text
Posté par: Syntax Error le Décembre 22, 2012, 10:34:52 pm
Bonjour,

J'ai commencé et bien avancé la création d'un pacman.
J'utilise sf::Text afin d'afficher le score.
Pour cela je converti un compteur entier en string, puis je place au fur et à mesure dans un tableau de sprite de 309 cases (puisqu'il y a un maximum de 309 points à atteindre dans le niveau de mon pacman), les sprite contenant le score à afficher.

La mise à jour du score ne pose aucun problème d'affichage (le score s'affiche correctement), mais les pacman/fantômes ne sont plus fluides du tout.

En bref :
Si je met cette ligne :
vm_tableauScore[vm_compteur] = vm_spriteScore;

Les déplacements ne sont plus fluides.
Si je l'enlève, les déplacements sont à nouveau fluides.


Auriez-vous une idée ?
Merci d'avance.
Titre: Re : [SFML 2.0 RC] Problème fluidité causé par sf::Text
Posté par: Laurent le Décembre 22, 2012, 10:37:44 pm
Ca va être difficile de t'aider avec si peu d'informations et de code.
Titre: Re : [SFML 2.0 RC] Problème fluidité causé par sf::Text
Posté par: Syntax Error le Décembre 22, 2012, 10:52:46 pm
        vm_compteur++;

        vm_textureScore.create(100, 60); //vm_textureScore est de type sf::RenderTexture
        vm_textureScore.clear(sf::Color::Black);

        vm_texteScore.setFont(vm_font); //vm_font correspond à la police utilise pour le texte
        vm_texteScore.setColor(sf::Color::White); //couleur de la police...

        std::string str; // Conversion du compteur
        std::ostringstream oss;
        oss << vm_compteur;
        vm_texteScore.setString(oss.str());

        vm_textureScore.draw(vm_texteScore); //Texte à afficher.
        vm_textureScore.display();

        sf::Sprite spriteScore(vm_textureScore.getTexture());
        spriteScore.setPosition(800,20);

        vm_tableauScore[vm_compteur] = spriteScore;

        vm_tableauMapEntier[y][x] = 15; //me permet de savoir si la case à déjà été visité
        vm_spriteTileSet.setTextureRect(sf::IntRect(15*tailleX, 0, tailleX, tailleY));
        vm_spriteTileSet.setPosition(x*tailleX, y*tailleY);
        vm_tableauMapSprite[y][x] = vm_spriteTileSet;

        app.draw(vm_tableauMapSprite[y][x]); // mise à jour map
        app.draw(pacman.fm_getPersoSprite()); // mise à jour pacman
        app.draw(vm_tableauScore[vm_compteur]); //mise à jour score

EDIT : Ce code est dans une condition et correspond aux instructions me permettant d'afficher le score.
Titre: Re : [SFML 2.0 RC] Problème fluidité causé par sf::Text
Posté par: Laurent le Décembre 22, 2012, 11:13:53 pm
Et tu fais ça à chaque tour de boucle ? Pourquoi stockes-tu le sprite de score dans un tableau ? Pourquoi affiches-tu le score indirectement, en faisant un pré-rendu dans une texture ?

Je ne connais pas ton code, il faut m'aider un peu en m'expliquant ce que tu fais, si tu veux que je puisse t'aider.
Titre: Re : [SFML 2.0 RC] Problème fluidité causé par sf::Text
Posté par: Syntax Error le Décembre 23, 2012, 08:39:07 am
Au départ j'avais encore moins de fluidité quand je faisais draw (sf::Text).
Et on m'avait dit que draw(sf::Text) était lente.
Du coup l'idée c'était de précharger les chiffres sous forme de tableau de sprite et au moment de l'affichage faire un draw(sf::Sprite) au lieu de draw(sf::Text).

C'est déjà plus fluide grâce à ça, mais c'est toujours légèrement saccadé.
Titre: Re : [SFML 2.0 RC] Problème fluidité causé par sf::Text
Posté par: Laurent le Décembre 23, 2012, 09:28:05 am
Dessiner un sf::Text n'est pas lent. Si tu le reconstruis à chaque tour de boucle (ce qui ne devrait pas être ton cas) c'est déjà un poil plus lent, mais normalement pas de quoi affecter les performances.
Titre: Re : [SFML 2.0 RC] Problème fluidité causé par sf::Text
Posté par: Syntax Error le Décembre 23, 2012, 10:19:18 am
Je peux t'assurer que ça rendait mon jeu pas fluide, mais alors pas fluide du tout :/

Je ne sais pas pourquoi, peut-être que c'est du à autre chose, mais le faite est que mon jeu était parfaitement fluide quand j'enlever le draw (et pour mon code ici c'est pareil).
Titre: Re : [SFML 2.0 RC] Problème fluidité causé par sf::Text
Posté par: Laurent le Décembre 23, 2012, 10:44:09 am
Si tu arrives à reproduire le problème dans un code complet minimal je pourrai jeter un oeil, voir si tu ne fais rien de bizarre.

Sinon, est-ce que tes drivers graphiques sont à jour ?