#0 

12-05-2008 19:45:27

nikska
Membre
Lieu: Montpellier
Date d'inscription: 12-05-2008
Messages: 36

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 wink

Dernière modification par nikska (12-05-2008 19:46:02)

Hors ligne


#1 

18-05-2008 21:38:43

nikska
Membre
Lieu: Montpellier
Date d'inscription: 12-05-2008
Messages: 36

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 :


Code:

//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 :

Code:

//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 :

Code:

//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


#2 

18-05-2008 22:05:04

bestben
Abonné
Date d'inscription: 20-10-2007
Messages: 133

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

Code:

MonBouton->setImage(driver->getTexture ("Texture.jpg"), irr::core::rect<irr::s32> (X1,Y1,X2,Y2));

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


#3 

19-05-2008 00:09:17

nikska
Membre
Lieu: Montpellier
Date d'inscription: 12-05-2008
Messages: 36

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. smile

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 :

Code:

myGui->addWindow(core::rect<s32>(0, 0, 400, 200), true, L"Chat",0);  //la ca marche pas

myGui->addWindow(core::rect<s32>(0, 0, 400, 200), false, L"Chat",0);  //ici ca marche OK

Dernière modification par nikska (19-05-2008 01:02:32)

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
Analysé par
880 membres
1424 sujets
11113 messages
Dernier membre inscrit: mandrifidy
26 invités en ligne
Aucun membre connecté
RSS Feed