Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Irrlicht] Les évenements

Sujet résolu
    30 mai 2007 à 19:11:34

    Salut, :)
    Je voudrais faire un inventaire et un système de statistique dans un jeu fait sous irrlicht en C.
    Je sais qu'Irllicht est fait en C++ et je compte bien refaire mes codes en C++ mais je veux d'abord en finir avec un probleme.
    Je voudrais ajouter un inventaire, donc quand on appuie sur I par exemple il affiche l'inventaire et on peut utiliser la souris pour modifier les objets.

    Le problème c'est qu'à la compilation du code ci dessous il affiche que SEvent n'est pas déclaré.

    bool OnEvent(SEvent event, IrrlichtDevice *device)
    {
            if (!device)
                    return false;

            if (event.EventType == EET_KEY_INPUT_EVENT &&
                    event.KeyInput.Key == KEY_ESCAPE &&
                    event.KeyInput.PressedDown == false)
            {
                            device->closeDevice();
            }
            else
            if ((event.EventType == EET_KEY_INPUT_EVENT &&
                    event.KeyInput.Key == KEY_SPACE &&
                    event.KeyInput.PressedDown == false) ||
                    (event.EventType == EET_MOUSE_INPUT_EVENT &&
                    event.MouseInput.Event == EMIE_LMOUSE_LEFT_UP))
            {

        //Shoot
       
            }
            else
            if (event.EventType == EET_KEY_INPUT_EVENT &&
                    event.KeyInput.Key == KEY_F9 &&
                    event.KeyInput.PressedDown == false)
            {
                    video::IImage* image = device->getVideoDriver()->createScreenShot();
                    if (image)
                    {
                            device->getVideoDriver()->writeImageToFile(image, "screenshot.png");
                            image->drop();
                    }
            }
            else
            if (device->getSceneManager()->getActiveCamera())
            {
                    device->getSceneManager()->getActiveCamera()->OnEvent(event);
                    return true;
            }

            return false;
    }



    Comment déclarer SEvent ?
    Pouvez vous m'aider ?

    Merci d'avance.

    Gp2mv3
    • Partager sur Facebook
    • Partager sur Twitter
      30 mai 2007 à 19:15:12

      Salut.

      Quel est le message d'erreur précisément ?

      SEvent est contenu dans le namespace irr::, le problème vient peut être de là.
      • Partager sur Facebook
      • Partager sur Twitter
        30 mai 2007 à 19:19:28

        Salut,
        Je viens de rééssayer et il n'y a plus de problème.
        Désolé :euh:
        Merci quand meme pour ton aide.
        Par contre j'ai une autre question.
        Je dois le mettre où le OnEvent?
        Dans la boucle ou avant ?

        Merci d'avance.

        Gp2mv3
        • Partager sur Facebook
        • Partager sur Twitter
          30 mai 2007 à 19:28:37

          C'est à dire ? Quelle boucle ?
          • Partager sur Facebook
          • Partager sur Twitter
            30 mai 2007 à 19:52:21

            Bah la boucle principale.
            • Partager sur Facebook
            • Partager sur Twitter
              30 mai 2007 à 21:00:19

              Tu veux dire la boucle de rendu ?

              Tu ne peux pas faire un appel à OnEvent dans la boucle de rendu.
              A vrai dire tu ne pas faire un appel à OnEvent du tout. ^^

              Cette méthode est automatiquement appelée quand un événement est détecté, mais pour en profiter, il faut que tu dérive la classe IEventReceiver.

              C'est expliqué (enfin expliqué est un bien grand mot... Image utilisateur ) dans ce tuto officiel : http://irrlicht.sourceforge.net/tut004.html
              • Partager sur Facebook
              • Partager sur Twitter
                31 mai 2007 à 7:27:40

                Ok
                Merci je vais voir maintenant. ;)
                Gp2mv3
                • Partager sur Facebook
                • Partager sur Twitter
                  2 juin 2007 à 21:48:12

                  Salut,
                  Je viens de comprendre en reprenant l'exemple irrlicht sur le render de terrain.

                  Le problème c'est que quand je fais comme dans l'exemple (en ayant changé les nom pour que sa compile bien), il plante et windows me demande si je veux ou pas envoyer le rapport.

                  Sais tu d'où sa peut venir?

                  Merci d'avance

                  Gp2mv3
                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 juin 2007 à 2:03:44

                    Ca peut venir d'un peu n'importe où.
                    Poste ton code pour voir.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      3 juin 2007 à 11:06:20

                      Salut,
                      Voici le fichier du menu principale :

                      #include <irrlicht.h>

                      using namespace irr;
                      using namespace core;
                      using namespace scene;
                      using namespace video;
                      using namespace io;
                      using namespace gui;

                      class MyEventReceiver : public IEventReceiver
                      {
                      public:
                              virtual bool OnEvent(SEvent event)
                              {
                                      if (event.EventType == EET_GUI_EVENT)
                                      {
                                              s32 id = event.GUIEvent.Caller->getID();
                                              IGUIEnvironment* env = device->getGUIEnvironment();

                                              switch(event.GUIEvent.EventType)
                                              {
                                              case EGET_BUTTON_CLICKED:

                                                      if (id == 101)
                                                      {
                          Dessiner(smgr, driver, device);//Fonction de dessin
                                                      }

                                                      break;
                                              default:
                                                      break;
                                              }
                                      }

                                      return false;
                              }
                      };


                      int Dessiner(ISceneManager* smgr2, IVideoDriver* driver2, IrrlichtDevice *device2);

                      int menuprincipal(ISceneManager* smgr, IVideoDriver* driver, IrrlichtDevice *device)
                      {   
                              MyEventReceiver receiver;
                              device->setEventReceiver(&receiver);
                         
                      }


                      La fonction Dessiner sert à dessiner le jeu.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        3 juin 2007 à 18:20:34

                        Je comprend pas trop ce que tu veux faire avec ce code...

                        A quoi sert la fonction menuprincipal ?

                        Et quel est le contenu de la fonction Dessiner ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          4 juin 2007 à 19:07:22

                          salut,
                          en faite la fonction menuprincipale sert a faire le menu et la fonction dessiner sert a dessiner le niveau.

                          gp2mv3
                          • Partager sur Facebook
                          • Partager sur Twitter

                          [Irrlicht] Les évenements

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown