Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Irrlicht] Interface utilisateur

Sujet résolu
    20 juin 2007 à 16:38:16

    Salut, :)
    J'ai encore un problème sous irrlicht.
    J'éssaye de faire une fenetre de connexion pour un jeu en réseau.
    J'ai donc deux question :
    • Comment faire une zone pour mot de passe ?
    • Comment récuperer les valeurs dans les zones de textes?

    Si non pour mon problème d'évenements, j'ai abandoné le code que j'avais fait et je l'ai entierement refait.

    Voila merci d'avance.

    Gp2mv3
    • Partager sur Facebook
    • Partager sur Twitter
      20 juin 2007 à 18:12:21

      Pour recuperer des zones de texte tu recevra les valeur en wchar_t*
      Voici un petit exemple :

      #include <irrlicht.h>

      using namespace irr;
      using namespace core;
      using namespace video;
      using namespace gui;

      /*------------------------------------------------------------------------------
        Evenements
      ------------------------------------------------------------------------------*/

      class MyEventReceiver : public IEventReceiver
      {
       public:
        MyEventReceiver(IGUIListBox* Console, IGUIEditBox* TxtSaisie)
        {
          saisie  = TxtSaisie;
          listbox = Console;
        }

        virtual bool OnEvent(SEvent event)
        {
          if (event.EventType == EET_GUI_EVENT)
          {
             if (event.GUIEvent.EventType == EGET_EDITBOX_ENTER)
             {
               listbox->addItem(saisie->getText());
               saisie->setText(L"");
               return true;
             }
          }
          return false;
        }

       private:
         IGUIEditBox* saisie;
         IGUIListBox* listbox;
      };

      /*------------------------------------------------------------------------------
        Point d'entree
      ------------------------------------------------------------------------------*/

      int main(int argc, char **argv)
      {
        s32 HEIGHT=200;
        s32 WIDTH =200;

        IrrlichtDevice* device = createDevice(EDT_OPENGL,
          dimension2d<s32>(HEIGHT, WIDTH), 24, false, false, false);
        if (!device) return 1;

        IVideoDriver*        driver = device->getVideoDriver();
        scene::ISceneManager*  smgr = device->getSceneManager();
        IGUIEnvironment*       igui = device->getGUIEnvironment();

        IGUIFont* font = igui->getFont("../../media/fonthaettenschweiler.bmp");
        igui->getSkin()->setFont(font);

        // Listbox pour stocker les messages
        IGUIListBox *Console = igui->addListBox(rect<s32>(0,0, WIDTH, HEIGHT-20), 0, 1, true);
        //Zone de saisie
        position2d<s32>  pos  (0,HEIGHT-20);
        dimension2d<s32> size ( WIDTH, 20);
        IGUIEditBox* TxtSaisie =  igui->addEditBox (    L"saisie", rect<s32>(pos,size), false, NULL, -1);
                     TxtSaisie->setOverrideColor (video::SColor(255,10,200,10));

        MyEventReceiver *receiver = new MyEventReceiver(Console, TxtSaisie);
        device->setEventReceiver(receiver);

        while (device->run())
        {
          driver->beginScene(true, true, 0);
          igui->drawAll();
          driver->endScene();
        }

        device->drop();
        delete receiver;
        return 0;
      }
      • Partager sur Facebook
      • Partager sur Twitter
        20 juin 2007 à 18:42:18

        Ton code ne fonctionne pas.
        Il plante quand je sélectionne la zone de texte.
        C'est quoi w_char_t* ?
        • Partager sur Facebook
        • Partager sur Twitter
          20 juin 2007 à 18:45:55

          Basiquement ça a la même "fonction" qu'un char, c'est un type de variable servant à contenir des caractères.

          Mais celui là est plus gros que char, ce qui permet de stocker des caractères hors de la table ascii standards.

          Toute la table unicode si je ne dit pas de connerie.

          EDIT : Tout est en wchar_t dans Irrlicht, c'est d'ailleurs pour ça qu'il faut mettre un L devant les chaines de caractères.
          • Partager sur Facebook
          • Partager sur Twitter
            20 juin 2007 à 18:46:39

            wchar_t* c'est une chaine concu pour l'unicode, les chaine de char sont coder sur 1 octet alors que les chaine de wchar_T sont coder sur 4 octets.

            Pour convertir :

               // wchar_t* -> char

            stringc charconvert = L"blalalala";
            const char* test;
            test = charconvert.c_str();

                    //char -> wchar_t
            stringw charconvert = "blalalala";
            wchar_t* test;
            test = charconvert.c_str();


            Ps: le code marche nikel chez moi...
            • Partager sur Facebook
            • Partager sur Twitter
              20 juin 2007 à 18:55:34

              Salut,
              je sais pas si c'est normale mais ton code ne fonctionne vrailent pas.
              j'ai trouvé le meme code sur : http://www.irrlicht.fr/forum/viewtopic.php?pid=1790

              Il ne fonctionnait pas non plus.

              Voila j'ai trouvé pourquoi il ne fonctionnait pas.
              Il n'arivait pas à charger la police donc il plantait.
              Merci pour ton code.

              Gp2mv3
              • Partager sur Facebook
              • Partager sur Twitter

              [Irrlicht] Interface utilisateur

              × 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