Forum de la communauté SFML

Aide => Général => Discussion démarrée par: èmji le Avril 29, 2018, 06:39:21 pm

Titre: Comment débugger mon programme
Posté par: èmji le Avril 29, 2018, 06:39:21 pm
Bonjour à tous,

je suis un des livres sur la SFML, et à la fin d'un chapitre j'ai une certains éléments qui ne s'affichent pas. Le code est un peu complexe (de mon point de vue en tout cas !) du coup je en sais pas comment le déboguer.

Avant de vous balancer tout mon code je voulais donc savoir comment on fait pour déboguer dans ce cas là ?

J'utilise Visual Studio 17. Autant en général j'arrive à suivre l'état de mes variables et le flot d'éxécution, autant là je ne sais pas comment trouver la raison de ce non-affichage. J'imagine qu'avec l'expérience et la connaissance de la SFML c'est plus facile.

Si vous avez des conseils, je suis preneur.

Merci d'avance.
Titre: Re: Comment débugger mon programme
Posté par: Laurent le Avril 30, 2018, 07:58:11 am
Citer
Le code est un peu complexe
Alors rend le moins complexe, et ne garde que les éléments qui permettent de reproduire le problème.

Le "code complet minimal" est un classique pour débuguer tout type de situation complexe ; il te permet également d'avoir des réponses pertinentes sur les forums car le code est simple (ie. les gens vont vraiment le regarder), complet (ie. compilable et testable) et on peut se focaliser sur le problème et non sur tout ce qu'il y a autour. Donc oui, si tu repostes, évite de "balancer tout ton code" ;).
Titre: Re: Comment débugger mon programme
Posté par: èmji le Avril 30, 2018, 11:58:12 am
J'ai suivi ton conseil et j'ai essayé de virer le maximum de code. J'ai enlevé le graphe de scène et l'affichage des avions qui se faisait correctement.

Le problème c'est que le background qui devait s'afficher sous les avions et les stats qui doivent s'afficher par dessus, n'apparaissent pas.

Le problème doit se trouver dans Game::render() et la classe World. Je soupçonne un problème avec sf::View, j'ai joué avec mais aucun résultat.
Titre: Re: Comment débugger mon programme
Posté par: Laurent le Avril 30, 2018, 12:33:03 pm
Il reste encore beaucoup trop de choses. Personne n'a envie d'aller regarder un projet avec plein de classes disséminées dans plein de fichiers. Pour être efficace, un exemple complet minimal doit tenir dans un fichier, voire être postable directement sur un forum.
Titre: Re: Comment débugger mon programme
Posté par: èmji le Avril 30, 2018, 01:25:12 pm
Merci du conseil, j'ai trouvé pourquoi les statisiques ne s'affichaient pas.
Pour le background, je ne comprends pas.

#include <iostream>
#include <SFML\Graphics.hpp>

const sf::Time TimePerFrame = sf::seconds(1.f / 60.f);

int main()
{
        sf::RenderWindow win(sf::VideoMode(640, 480), "Shoot'em up !");
        sf::View mWorldView(win.getDefaultView());
        sf::FloatRect mWorldBounds(0.f, 0.f, mWorldView.getSize().x, 2000.f);
        sf::Vector2f mSpawnPosition(mWorldView.getSize().x / 2.f,
                     mWorldBounds.height - mWorldView.getSize().y / 2.f);

        sf::Clock clock;
        sf::Time timeSinceLastUpdate = sf::Time::Zero;
        while (win.isOpen())
        {

                // Render -----------------------------------------------------------
                win.clear();

                sf::Texture texture;
                texture.loadFromFile("Textures/Desert.png");
                sf::IntRect textureRect(mWorldBounds);
                texture.setRepeated(true);
                sf::Sprite bg_sprite(texture);

                // Prepare the view
                mWorldView.setCenter(mSpawnPosition);   //Si je commente le background s'affiche
                win.setView(mWorldView);
                win.draw(bg_sprite);

                win.setView(win.getDefaultView());
                win.display();
                //-----------------------------------------------------------------------

        }

        return 0;
}
Titre: Re: Comment débugger mon programme
Posté par: Laurent le Avril 30, 2018, 02:33:15 pm
Affiche et compare les coordonnées & taille de ta vue et de ton sprite de background ; tu verras qu'il y a des soucis.
Titre: Re: Comment débugger mon programme
Posté par: èmji le Avril 30, 2018, 03:58:02 pm
J'ai oublié de mettre textureRect dans le constructeur de bg_sprite...

Par contre dans mon code complet textureRect est passé à SpriteNode qui s'en sert pour construire la texture. J'ai regardé les coordonnées et taille de la vue et de la texture ça à l'air correct.

Je n'ai pas réussi à réduire le code sans enlever le bug. Je continue de chercher.


Edit: ok, j'avais juste mis un 'r' de trop dans le nom de la fonction draw. J'aurai vu mon erreur si j'avais appliqué le mot clé override  ;)

Par contre l'image de fond est supposé se répéter sans que l'on voit de "cassure". Je ne comprends pas pourquoi on peut distinguer quand ça se répète, mais au moins ça marche.