Partage
  • Partager sur Facebook
  • Partager sur Twitter

Irrlicht

petit probleme mais dur a resoudre !

    20 janvier 2007 à 2:17:14

    Avis a tout les irrlichient ! :D
    J'ai un probleme :euh:

    J'ai de l'exeprience car je programme des jeux video en 3D avec ce moteur mais je ne mettais encore jamais lancer dans les interfaces comme celle ci !

    je suis entrain de coder un createur de page Html avec Irrlicht mais la je tombe sur une ribanbale de probleme !

    Voici mon code :
    /*Par maitrelame2*/
    #include <irrlicht.h>
    #include <iostream>

    using namespace irr;

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

    #pragma comment(lib, "Irrlicht.lib")


    IrrlichtDevice *device = 0;
    s32 cnt = 0;
    IGUIListBox* listbox = 0;
    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_SCROLL_BAR_CHANGED:
                                    if (id == 104)
                                    {
                                            s32 pos = ((IGUIScrollBar*)event.GUIEvent.Caller)->getPos();
                                           
                                            for (s32 i=0; i<EGDC_COUNT ; ++i)
                                            {
                                                    SColor col = env->getSkin()->getColor((EGUI_DEFAULT_COLOR)i);
                                                    col.setAlpha(pos);
                                                    env->getSkin()->setColor((EGUI_DEFAULT_COLOR)i, col);
                                            }
                                           
                                    }
                                    break;

                            case EGET_BUTTON_CLICKED:

                                    if (id == 101)
                                    {
                                            device->closeDevice();
                                            return true;
                                    }

                                    if (id == 102)
                                    {
                                            listbox->addItem(L"Window");
                                            cnt += 30;
                                            if (cnt > 200)
                                                    cnt = 0;

                                            IGUIWindow* window = env->addWindow(
                                                    rect<s32>(100 + cnt, 100 + cnt, 300 + cnt, 200 + cnt),
                                                    false, // modal?
                                                    L"Test window");

                                            env->addStaticText(L"Creer un nouveau projet !"
                                                    rect<s32>(35,35,140,50),
                                                    true, // border?
                                                    false, // wordwrap?
                                                    window);

                                            return true;
                                    }

                                    if (id == 103)
                                    {
                                            listbox->addItem(L"Ouvrir un fichier");
                                            env->addFileOpenDialog(L"Veuillez choisir un fichier");
                                            return true;
                                    }

                                    break;
                            }
                    }

                    return false;
            }
    };


    int main()
    {

           
            video::E_DRIVER_TYPE driverType;

            printf("Please select the driver you want for this example:\n"\
                    " (a) Direct3D 9.0c\n (b) Direct3D 8.1\n (c) OpenGL 1.5\n"\
                    " (d) Software Renderer\n (e) Apfelbaum Software Renderer\n"\
                    " (f) NullDevice\n (otherKey) exit\n\n");

            char i;
            std::cin >> i;

            switch(i)
            {
                    case 'a': driverType = video::EDT_DIRECT3D9;break;
                    case 'b': driverType = video::EDT_DIRECT3D8;break;
                    case 'c': driverType = video::EDT_OPENGL;   break;
                    case 'd': driverType = video::EDT_SOFTWARE; break;
                    case 'e': driverType = video::EDT_SOFTWARE2;break;
                    case 'f': driverType = video::EDT_NULL;     break;
                    default: return 1;
            }       

            device = createDevice(driverType, core::dimension2d<s32>(640, 480));

            if (device == 0)
                    return 1; // could not create selected driver.
            MyEventReceiver receiver;
            device->setEventReceiver(&receiver);
            device->setWindowCaption(L"Irrlicht Engine - User Inferface Demo");

            video::IVideoDriver* driver = device->getVideoDriver();
            IGUIEnvironment* env = device->getGUIEnvironment();

            env->addButton(rect<s32>(560,430,620,470), 0, 101, L"Quitter");
            env->addButton(rect<s32>(10,10,100,40), 0, 102, L"Nouveau projet");
            env->addButton(rect<s32>(120,10,210,40), 0, 103, L"Charger un projet");
            IGUISkin* skin = env->getSkin();
            IGUIFont* font = env->getFont("image/fond.png");
            if (font)
                    skin->setFont(font);
            env->addEditBox(L"Editable Text", rect<s32>(70, 60, 620,520));
            while(device->run() && driver)
            if (device->isWindowActive())
            {
                    driver->beginScene(true, true, SColor(0,200,200,200));

                    env->drawAll();
           
                    driver->endScene();
            }

            device->drop();

            return 0;
    }


    Mes problemes :

    1. Arriver a faire en sorte que le texte taper dans
            env->addEditBox(L"Editable Text", rect<s32>(70, 60, 620,520));

    Puisse etre retourner a la ligne en envoyant un evenement de pression sur entrer.

    2. Pointer sur le texte entrer dans
            env->addEditBox(L"Editable Text", rect<s32>(70, 60, 620,520));


    Car comme cela quand l'user mets un '[' je prends de qui sera ecrit jusqu'a ']' ensuite je mettrer le texte ecrit dans la balise.

    3. Comment faire pour loader un fichier !

    Merci de vos reponse

    ps : je n'ai pas mis de cmmentaire car ce qui peuvent m'aider n'en auront surement pas besoin !
    • Partager sur Facebook
    • Partager sur Twitter
      20 janvier 2007 à 9:21:54

      Bon, ce que vais te dire va peut-être être une énoorme bêtise et , en tous les cas, ne va pas t'aider pour ton problème présent m'enfin ...
      Irrlicht est un moteur 3d non ?
      un créateur de page html, tu parle d'un truc comme dreamweaver non ?
      alors ... ou est-ce que tu peut bien avoir besoin d'un moteur 3d la dedans ? o_Oo_O
      Pourquoi tu n'utiliserais pas GTK ou QT ?
      çe serait plus adapté non ?

      sinon ... peut-être une autre enorme connerie m'enfin bon ... je suis chaud bouillant ce matin :

      Citation : maitrelame

      Comment faire pour loader un fichier


      je proposerais bien :

      FILE *p=NULL;
      p=fopen("monfichier.htm","r");

      non ?
      (ah tant que j'y suis ...tu écrit loader et pas charger parcequ'il y a une quelconqu différence ? où c'est juste pour la lettre en moins à écrire o_O ?)
      • Partager sur Facebook
      • Partager sur Twitter
        20 janvier 2007 à 9:32:53

        C'est pas pareil avec irrlicht...
        si c'etait aussi facile je posterias pas !
        Et irrlicht simplement parce que je souhaite finir ma formation dessus !!!
        • Partager sur Facebook
        • Partager sur Twitter
          20 janvier 2007 à 9:34:00

          bon ... au temps pour moi alors ...

          m'enfin , étant donné que je suis tétu ..

          addFileOpenDialog tu obtiens un chemin vers le fichier après ça non ?
          • Partager sur Facebook
          • Partager sur Twitter
            20 janvier 2007 à 13:00:59

            Citation : maitrelame12545

            Mes problemes :

            1. Arriver a faire en sorte que le texte taper dans

                    env->addEditBox(L"Editable Text", rect<s32>(70, 60, 620,520));


            Puisse etre retourner a la ligne en envoyant un evenement de pression sur entrer.


            ce que j'adore, c'est qu'une IGUIEditBox c'est une Single line edit box. :D C'est pas très pratique pour faire un éditeur html.

            Citation : maitrelame12545

            2. Pointer sur le texte entrer dans

                    env->addEditBox(L"Editable Text", rect<s32>(70, 60, 620,520));



            Car comme cela quand l'user mets un '[' je prends de qui sera ecrit jusqu'a ']' ensuite je mettrer le texte ecrit dans la balise.


            Et ça veut dire quoi 'pointer' ? tu veux récupérer un char* représentant le contenu de l'edit box ?
            t'as essayé getText () ? :D ça renvoie un wchar_t*.

            Citation : maitrelame12545

            3. Comment faire pour loader un fichier !


            tu ouvres le fichier, et tu le parses selon tes besoins. un std::ifstream, des std::strings et voilà. Ca n'est que de la gestion de chaines de caractères.

            Citation : maitrelame12545

            ps : je n'ai pas mis de cmmentaire car ce qui peuvent m'aider n'en auront surement pas besoin !


            Oui, d'autant que, à la virgule près, 95% de ton code vient directement du tuto officiel.
            • Partager sur Facebook
            • Partager sur Twitter
              20 janvier 2007 à 19:03:03

              Je me suis belle est bien base dessus !

              Mais je ne voit pas comment pointer dans le texte...
              Car c'est pas une fonction independante a premiere vu ???
              • Partager sur Facebook
              • Partager sur Twitter
                21 janvier 2007 à 1:07:23

                Je ne sais toujours pas ce que tu entends par "pointer". Et c'est quoi pour toi une fonction "indépendante" ?
                Et je ne vois pas non plus quel est ton problème avec getText().
                • Partager sur Facebook
                • Partager sur Twitter
                  21 janvier 2007 à 4:14:23

                  Je ne sais pas ou la mettre lol !!!
                  et par pointer je veux dire mettre le texte en memoire pour faire certaines choses dessus !
                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 janvier 2007 à 9:19:27

                    d'après la doc officielle, c'est virtual const wchar_t * irr::gui::IGUIElement::getText () et IGUIEditBox hérite de IGUIElement.
                    Il suffit donc de donner un nom à ton objet IGUIEditBox* et tu as les méthodes qui vont avec.
                    IGUIEditBox *eb1 = env->addEditBox(L"Editable Text", rect<s32>(70, 60, 620,520));

                    et tu auras eb1->getText()
                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 janvier 2007 à 19:22:29

                      Merci mais je n'arrive toujours pas a aller a la ligne...
                      comment faire ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        21 janvier 2007 à 19:26:36

                        Citation : maitrelame12545

                        Merci mais je n'arrive toujours pas a aller a la ligne...
                        comment faire ?


                        il me semble que dans un de ses messages précédents, il dit que l'on ne peux pas, c'est comme si tu voulais aller à la ligne dans un :
                        <input type="text" />
                        • Partager sur Facebook
                        • Partager sur Twitter
                          21 janvier 2007 à 19:33:55

                          Citation : khayyam

                          Citation : maitrelame12545

                          Mes problemes :

                          1. Arriver a faire en sorte que le texte taper dans

                                  env->addEditBox(L"Editable Text", rect<s32>(70, 60, 620,520));


                          Puisse etre retourner a la ligne en envoyant un evenement de pression sur entrer.


                          ce que j'adore, c'est qu'une IGUIEditBox c'est une Single line edit box. :D C'est pas très pratique pour faire un éditeur html.



                          Je n'y connais rien à Irrlicht, mais il me semble que ceci répond à ta question, si l'IGUIEditBox est une single line edit box, il n'y a qu'une seule ligne, donc pas facile d'aller à la ligne ...
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
                            21 janvier 2007 à 21:58:58

                            Oui mais quelqu'un peut me donner la fonction qui permet d'ecrire un texte lol
                            • Partager sur Facebook
                            • Partager sur Twitter
                              21 janvier 2007 à 22:05:14

                              Tu peux écrire du texte sur plusieurs lignes dans un IGUIStaticText mais ce n'est pas éditable avec la souris à la manière d'un IGUIEditBox. Je ne connais pas bien irr::gui, mais il ne me semble pas qu'il existe un widget adapté à la gestion de texte comme ce que tu recherches. Irrlicht n'est pas du tout fait pour ça.
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Irrlicht

                              × 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