Salut
comment est défini et aussi comment définir soi meme, qu'un objet 2d est en avant plan ou arriere plan par rapport a un autre ?
Hors ligne
C'est l'ordre avec lequel tu dessines.
A chaque fois que tu dessines un objet 2D, il est dessiné par dessus les autres
Hors ligne
oui je sais mais il n'y a pas un moyen de modifier sans redessiner ? il y a une méthode qui s'appelle bringToFront(). Y a un rapport ou non ?
Dernière modification par Dragonblood (24-11-2008 14:53:47)
Hors ligne
effectivement tu peut utiliser bringToFront() sur les element que tu veux mettre en premier plan en laissant lelement choisie en arriere
Hors ligne
Arf non c'est pas bon bringToFront n'agit que sur les enfants de l'image...
Hors ligne
sinon tu detrui l'objet et tu le recrée
x->remove();
x = env->addXXXX
Hors ligne
ouais c'est ce que je vais faire
parcontre mon image à des enfants et j'aimerais contenir ces enfants dans une list (ben en fait j'ai pas le choix y a que comme ca que je peux faire)
par contre je n'y connais rien aux liste
donc je crée une liste qui s'appelle listeChild et qui sera une liste contenant des IGUIELEMENT.
list<IGUIElement*> listeChild ;
listeChild=_guiElement->getChildren();
cout<<"listeChild"<<&listeChild.begin()<<endl;
Je crée une variable de type Iterator appelé I pour contenir le premier élément de la liste (avec la méthode Begin).
mais la il me renvoie une erreur ...
Quelqu'un connait bien les listes ?
Hors ligne
sinon utilise les file
#include <irr/irrlicht.h> #include <queue> using namespace std; int main() { queue<ISceneNode*> balle; //Pour ajouter une balle ISceneNode* toAdd= ...... balle.push(toAdd); //Pour récupéré le premier élément ajouter ISceneNode* toRecup = bale.front(); //Pour effacer le premier élément balle.pop(); //Pour avoir la taille de la file bale.size(); }
Si on fait .pop alors que la file et vide le programe plante toujours t'ester l'existence d'element avec .empty() qui renvoie un boolean
Dernière modification par pspmy (24-11-2008 19:16:08)
Hors ligne
oui je sais mais il n'y a pas un moyen de modifier sans redessiner ?
Sachant que tout est redessiné plus de 60x par seconde, ce que tu dis est un peu bizarre...
il y a une méthode qui s'appelle bringToFront(). Y a un rapport ou non ?
Dans ce cas précise que tu utilises le module gui, car "images" c'est super vague, et ça fait surtout référence à draw2DImage :
http://irrlicht.sourceforge.net/docu/cl … r.html#a18
Hors ligne
Sachant que tout est redessiné plus de 60x par seconde, ce que tu dis est un peu bizarre...
Ce n'est pas le fait de redessiner qui me dérange mais d'utiliser la commande remove() et de reconstruire l'objet ensuite. Parce que quand je détruit l'objet je détruit aussi ses enfants et je dois reconstruire l'objet et ses enfants donc voila c'est pour ca surtout.
Dans ce cas précise que tu utilises le module gui, car "images" c'est super vague, et ça fait surtout référence à draw2DImage :
Non c'est une IGUIImage
sinon utilise les file
Code:
#include <irr/irrlicht.h>
#include <queue>
using namespace std;Code:
int main() { queue<ISceneNode*> balle; //Pour ajouter une balle ISceneNode* toAdd= ...... balle.push(toAdd); //Pour récupéré le premier élément ajouter ISceneNode* toRecup = bale.front(); //Pour effacer le premier élément balle.pop(); //Pour avoir la taille de la file bale.size(); }
Si on fait .pop alors que la file et vide le programe plante toujours t'ester l'existence d'element avec .empty() qui renvoie un boolean
Merci. Je connais deja un peu les pile et les files mais la ou j'avais du mal c'était pour l'utilisation de la classe Iterator et pour récuper la valeur de la méthode begin.
bon finalement j'ai trouvé pour ceux que ca interesse:
voila merci pour les réponse rapide c'est cool.
J'vai surment me coucher vu l'heure (je suis à la Réunion donc il est tard) mais a mon avis on se revera demain lol
++
Dernière modification par Dragonblood (24-11-2008 21:09:10)
Hors ligne
bon voila la suite de l'épisode précédent.
J'ai créé ma liste qui contient tout les enfant de ma gui avec la méthode getChildren()
jusque la c'est bon maintenant je veux détruire les enfants:
if (listeChildsize!=0) // si la liste n'est pas vide. Autrement dit s'il y a toujours des enfants { _guiElement->removeChild(*premier); // Je détruit le premier enfant }
En fait le code au dessus marche aussi. (ben alors pourquoi tu nous casse les c... alors ?)
J'aimerais pouvoir accéder au méthode des enfants de la gui (qui sont aussi des gui)
par exemple:
if (listeChildsize!=0) // si la liste n'est pas vide. Autrement dit s'il y a toujours des enfants { premier->remove(); // Ici je veux manipuler directement l'enfant }
Et ben la ca ne marche pas (et c'est normal d'ailleurs). Le compilo me dit en gros que Premier est un Iterator et pas un gui donc il n'a pas accés à la méthode remove() et toutes les autres d'ailleurs. Donc ben la comment je fais pour que Premier fasse référence à une enfant est que je puisse avoir accés à ses méthodes (de l'enfant hein) ?
++
Hors ligne
bon allez je me répond à moi meme. Il suffit de mettre des parenthèse pour que ca marche donc:
(*premier)->remove(); // Ici je veux manipuler directement l'enfant
A++
Hors ligne
Re ben pour ceux que ca interesse j'ai trouvé une méthode encore plus simple pour réger l'avant et l'arriere plan d'une gui.
Il faut bien la détruire avec remove mais il ne faut pas la redessiner en refaissant guiEnv->addimage. C'est tout bête en fait.
Il suffit de sauvegarder sa gui dans un fichier texte et de la reloader.
const c8 * guiFile="guiFile.txt"; // je créer un fichier texte qui s'appelle guiFile.txt
guiEnv->saveGUI ( guiFile, m_guiElement); //je sauvegarde ma gui dans le fichier texte
Ce fichier génére un xml (malgré l'extension txt que j'ai donné en haut) et il sauvegarde toutes les infos de ma gui: sa position, sa taille, s'il est visible et meme ses enfants.
Je n'ai plus qu'a faire
m_guiElement->remove(); //je détruit ma gui
guiEnv->loadGUI(guiFile); // je la reload et elle conserve tous ses paramètre d'avant sa déstruction
Ainsi ma gui qui était en arriere plan et en avant plan. C'est une sorte de Focus. voila c'est super simple en faite.
Moi qui au départ je voulais récuperer les enfant dans une liste et les réafficher un a un en récupérant leur position, etc, leur ITexture et compagnie ben la ca le fait automatiquement.
voila j'espère que ca peut interesser quelqu'un meme si c'est tout con finalement..
++
Dernière modification par Dragonblood (29-11-2008 09:45:27)
Hors ligne
Merci, en effet la méthode ne sautais pas aux yeux au départ. Cool que tu arrives à tes fin
Hors ligne
Bon je déterre ce post pour dire qu'au passage à Irrlicht 1.5 j'ai eu quelque prob et cette fonction ne marche plus trés bien.
Mais j'ai touvé encore mieux lol il y a ce qu'on appelle le RootGuiElement. C'est un GUIELEMENT qui est le parent de tout les gui sur la scène. Il est appelé a chaque fois que l'on créé un GUIELEMENT mais sans que l'utilisateur ne le sache lol. A chaque GUIELEMENT crée il est automatiquement enfant du RootGUIELEMENT qui conserve la liste de tous ses enfants.
Alors donc pour gérer l'arriere plan et l'avant plan de votre gui il faut tout simplement récupérer ce GUIROOT et utiliser la méthode BringToFront (mettre en avant en français).
donc
IGUIElement* guiRoot=guiEnv->getRootGUIElement( ) ; guiRoot->bringToFront(Ma_guiElement);
J'ai appris l'existence de ca en lisant le tuto de Kevin Leonhart à cette endroit la
http://www.siteduzero.com/tutoriel-3-56 … -bete.html
En fait il existe le meme systeme mais pour le SceneManager également
Dernière modification par Dragonblood (19-12-2008 09:46:39)
Hors ligne
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 8 invités en ligne Aucun membre connecté RSS Feed |