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

Auteur Sujet: Comment débugger mon programme  (Lu 2824 fois)

0 Membres et 1 Invité sur ce sujet

èmji

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
Comment débugger mon programme
« 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.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: Comment débugger mon programme
« Réponse #1 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" ;).
Laurent Gomila - SFML developer

èmji

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
Re: Comment débugger mon programme
« Réponse #2 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.
« Modifié: Avril 30, 2018, 01:58:39 pm par èmji »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: Comment débugger mon programme
« Réponse #3 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.
Laurent Gomila - SFML developer

èmji

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
Re: Comment débugger mon programme
« Réponse #4 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;
}

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: Comment débugger mon programme
« Réponse #5 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.
Laurent Gomila - SFML developer

èmji

  • Newbie
  • *
  • Messages: 17
    • Voir le profil
Re: Comment débugger mon programme
« Réponse #6 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.
« Modifié: Avril 30, 2018, 04:23:43 pm par èmji »