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

Auteur Sujet: Probleme situé au niveau des events  (Lu 2463 fois)

0 Membres et 1 Invité sur ce sujet

diabolo77

  • Newbie
  • *
  • Messages: 19
    • Voir le profil
Probleme situé au niveau des events
« le: Août 26, 2012, 05:05:32 pm »
Salut tous le monde ,
j'ai lu rapidement quelque tuto mais je préfére apprendre par moi même ! J'ai donc naturellement commencé à faire des programme plus inutile que les autres pour m'entrainer ;) !
Mais voila j'ai un probleme je n'ai pas encore pris l'habitude du debug de sfml donc j'ai encore du mal à voir d'où viens mon erreur :/!
mon code s'arrete au niveau des évent (j'ai su ça grace a quelque sleep quis'arette de fonctionner au niveau des events ;) ).
Donc voici le code :



#include <cstdlib>
#include <iostream>
#include <SFML/Graphics.hpp>
using namespace sf;
using namespace std;

int main()
{
    RenderWindow app(VideoMode(800, 600, 32), "deplacement chat ");
    Image image;
    Sprite sprite,personnage;
    int x = 100 , y = 100,nombre=0,cote = 3;
    bool marche = false;
    Event event;


    if (!image.LoadFromFile("cat.png"))
    {
        cout<<"Erreur durant le chargement de l'image"<<endl;
        return EXIT_FAILURE;
    }
    else
    {



        image.CreateMaskFromColor(sf::Color(32,156,0),255);
        personnage.SetImage(image);

    while (app.IsOpened())
    {
    while (app.GetEvent(event))
    {
        switch (event.Type)
        {
            case Event::Closed :
                app.Close();
                break;

            case Event::KeyPressed :
            {
                switch (event.Key.Code)
                {


                    case Key::Down :
                        if(nombre <= 5)
                        {
                            personnage.SetSubRect(sf::IntRect(0, 69, 23, 95));
                            nombre++;
                        }
                        else if(nombre > 5 && nombre <= 10)
                        {
                            personnage.SetSubRect(sf::IntRect(23,69,47,95));
                            nombre++;
                        }
                        else
                        {
                              personnage.SetSubRect(IntRect(47,69,72,95));
                              if(nombre == 15)
                              {
                                  nombre = 0;
                              }
                              else
                              {
                                  nombre++;
                              }

                        }
                        cote = 3;
                        marche = true;
                        x--;
                        break;
                    case Key::Right:
                        if(nombre <= 5)
                        {
                            personnage.SetSubRect(IntRect(0, 35, 23, 69));
                            nombre++;
                        }
                        else if(nombre > 5 && nombre <= 10)
                        {
                            personnage.SetSubRect(IntRect(23, 35, 47, 69));
                            nombre++;
                        }
                        else
                        {
                              personnage.SetSubRect(IntRect(47, 35, 72, 69));
                              if(nombre == 15)
                              {
                                  nombre = 0;
                              }
                              else
                              {
                                  nombre++;
                              }

                        }
                        cote = 2;
                        marche = true;
                        y++;
                        break;

                        case Key::Up:
                        if(nombre <= 5)
                        {
                            personnage.SetSubRect(IntRect(0, 0, 23, 33));
                            nombre++;
                        }
                        else if(nombre > 5 && nombre <= 10)
                        {
                            personnage.SetSubRect(IntRect(23, 0, 47, 33));
                            nombre++;
                        }
                        else
                        {
                              personnage.SetSubRect(IntRect(47, 0, 72, 33));
                              if(nombre == 15)
                              {
                                  nombre = 0;
                              }
                              else
                              {
                                  nombre++;
                              }

                        }
                        cote = 1;
                        marche = true;
                        x--;
                        break;

                        case Key::Left:
                        if(nombre <= 5)
                        {
                            personnage.SetSubRect(IntRect(0,95,23,127));
                            nombre++;
                        }
                        else if(nombre > 5 && nombre <= 10)
                        {
                            personnage.SetSubRect(IntRect(23,95,47,127));
                            nombre++;
                        }
                        else
                        {
                              personnage.SetSubRect(IntRect(47,95,72,127));
                              if (nombre==15)
                              {
                                  nombre = 0;
                              }
                              else
                              {
                                  nombre++;
                              }

                        }
                        cote = 4;
                        marche = true;
                        x++;
                        break;



                    default :
                        break;
                }
            }
            break;

            default :
                break;
        }
        if(marche == false)
        {
            if(cote == 1)
            {
                personnage.SetSubRect(IntRect(23, 0, 47, 33));
            }
            else if (cote == 2)
            {
                personnage.SetSubRect(IntRect(0, 35, 23, 69));
            }
            else if (cote==3)
            {
                personnage.SetSubRect(IntRect(23,69,47,95));
            }
            else
            {
                personnage.SetSubRect(IntRect(23, 95, 47, 127));
            }
        }
        personnage.SetPosition(Vector2f(x, y));
        marche = false;

        app.Clear();
        app.Draw(personnage);


        app.Display();
        personnage.SetImage(image);
        sf::Sleep(0.5f);

        std::cout << 1 << std::endl;
    }
    return EXIT_SUCCESS;
}

}
}

Merci d'avance ;) !

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Probleme situé au niveau des events
« Réponse #1 le: Août 26, 2012, 05:44:06 pm »
Ca veut dire quoi "le code s'arrête" ? Et puis ce serait bien d'alléger le code pour enlever tout ce qui est inutile, de façon à ce que l'erreur saute aux yeux :)
Laurent Gomila - SFML developer

coco

  • Newbie
  • *
  • Messages: 26
    • Voir le profil
    • Galhmac Game Studio
Re : Probleme situé au niveau des events
« Réponse #2 le: Août 27, 2012, 12:02:18 pm »
Il faudrait que tu indentes mieux ton code parce que c'est dur a lire, mais tu retournerais pas EXIT_SUCCESS a la fin de ta boucle ou tu teste app.IsOpenned ? du coup oui, ton programme doit se fermer après la premiere boucle...

int main()
{
    [...]

    if (!image.LoadFromFile("cat.png"))
    {
        cout<<"Erreur durant le chargement de l'image"<<endl;
        return EXIT_FAILURE;
    }
    else
    {
       [...]
        while (app.IsOpened())
        {
            while (app.GetEvent(event))
            {
                switch (event.Type)
                {
                    [...]
                }
                if(marche == false)
                {
                   [...]
                }
                personnage.SetPosition(Vector2f(x, y));
                marche = false;

                app.Clear();
                app.Draw(personnage);


                app.Display();
                personnage.SetImage(image);
                sf::Sleep(0.5f);

                std::cout << 1 << std::endl;
            }
            return EXIT_SUCCESS;// La ligne fatale =)
        }
    }
}
 
« Modifié: Août 27, 2012, 12:03:57 pm par coco »