1. Bon déjà je voudrai savoir si vous me recommandez de garder la gui d'origine de Irrlicht ou d'en changer ?
(j'ai vu qu'on pouvais changer de gui dans Ogre3D, j'imagine que c'est le cas aussi pour Irrlicht)
2. Ensuite je voudrai savoir comment on peut aligner un élément gui (comme une IGUIWindow par exemple) à en bas à droite dans mon cas ?
J'ai remarqué qu'il y avait un enum d'alignement dans IGUIElement mais je n'ai pas réussi à le mètre en pratique.
3. Comment peut-on faire en sorte qu'une image appliqué à un bouton (par exemple) soit redimensionnée à la taille du bouton ?
4. Comment rendre transparent un élément (un bouton par exemple) pour qu'il n'y ai plus que la texture d'affiché ?
5. Comment utiliser les alpha d'une texture d'un élément ? (ici j'ai trouvé la réponse alors je la post)
bouton->setImage(driver->getTexture("bouton01.bmp"));
bouton->setUseAlphaChannel(true); //est réglé sur false par defaut.
ps: ce post pourrait faire l'objet d'une F.A.Q ou Code Snippets sur la gui d'Irrlicht, alors vous pouvez posez aussi vos questions
Dernière modification par nikska (12-05-2008 19:46:02)
Hors ligne
Bon ben je vais me répondre à moi même comme personne n'a trouvé:p
2. Comment aligner un élément gui (exemple une IGUIWindow) en bas à droite ?
Perso j'ai fait une classe avec des methodes qui donnent :
//je précise au cas où les includes #include <irrlicht.h> #include <IGUIElement.h> #include "Aligne.h" //et le namespace using namespace irr; // aligne un IGUIElement en bas à droite (sans modifier sa taille) void Aligne::aligneLowerRight(gui::IGUIWindow* Element) { // on récupère le IGUIElement parent pour connaître la position max gui::IGUIElement* elementParent = Element->getParent(); s32 pointXmax = elementParent->getRelativePosition().getWidth(); s32 pointXmin = pointXmax - Element->getRelativePosition().getWidth() ; //on récupère la largeur s32 pointYmax = elementParent->getRelativePosition().getHeight(); s32 pointYmin = pointYmax - Element->getRelativePosition().getHeight() ; //on récupère la hauteur core::rect<s32> tailleRectSceneFinal (pointXmin, pointYmin, pointXmax, pointYmax); Element->setRelativePosition(tailleRectSceneFinal); //on repositionne l'élément gui }
Pour aligner en bas de la fenêtre :
//aligne un IGUIElement en bas de la fenêtre (sans modifier sa taille) void Aligne::aligneLower(gui::IGUIWindow* Element) { // on récupere le IGUIElement parent pour connaitre la position max gui::IGUIElement* elementParent = Element->getParent(); s32 pointXmax = Element->getAbsolutePosition().getWidth() ; s32 pointXmin = Element->getAbsolutePosition().UpperLeftCorner.X; s32 pointYmax = elementParent->getAbsolutePosition().getHeight(); s32 pointYmin = pointYmax - Element->getAbsolutePosition().getHeight() ; core::rect<s32> tailleRectSceneFinal (pointXmin, pointYmin, pointXmax, pointYmax); Element->setRelativePosition(tailleRectSceneFinal); }
Et pour faire appel à ces methodes c'est tout simple :
//l'include de la nouvelle class en plus des autres #include "Aligne.h" Aligne monAligne; //monAligne.aligneLeft( maWindow); monAligne.aligneLowerRight( maWindow);
Attention cependant il y a peut être une petite erreur au niveau des methodes getAbsolutePosition() et getRelativePosition(). Elles semblent donner le même resultat mais il doit y avoir une différence que je n'ai pas encore trouvé !
Hors ligne
A priori getAbsolutePosition() renvoi la position absolu de ton élément -> donc la position dans la fenêtre,
et getRelativePosition() renvoi la position relative de ton élément -> la position par rapport à son parent
Pour rendre transparent un bouton tu fait MonBouton->setDrawBorder(false);
pour redimensioner une texture sur un bouton tu fait
X1, Y1, X2, Y2 correspondent à la taille de ta texture
Ex : si ta texture a une taille de 256*256 tu fait irr::core::rect<irr::s32> (0,0,256,256)
Hors ligne
Ok merci
Donc du coup on pourait très bien créer (j'imagine une image avec different élement avec pour chacun les coordonée de l'image.
Pour ce qui est de repositionner un élément avec ma methode, j'ai constaté après qu'il y avait un probleme avec la zone de séléction de l'élément. Donc qu'il faut déplacer aussi la zone de sélection dans la methode. A moins qu'il y ai une erreur dans la methode ! ?
ps : j'ai trouvé en faite c'est juste un mauvais parametrage dans ma fonction : myGui->addWindow();
avec :
Dernière modification par nikska (19-05-2008 01:02:32)
Hors ligne