Bonjour, (et oui encore moi ^^)
Je me demandais si il etait possible de supprumer un mesh que l'on a prealablement charge.
Par exemple une ressource qui est disponible, et des qu'on la prends, et bien elle disparait.
Pour que plus tard elle se renouvelle (reaparraisse) a la meme place.
Est-ce possible ?
Merci d'avance ^^
Hors ligne
salut,
il y a 2 choses bien différentes que l'on peut faire. La différence est entre "supprimer" et faire "disparaitre". Si tu le supprime, tu ne pourras pas le faire réapparaitre, par contre si tu le rend invisible (avec un "node->setVisible(false) " par exemple) tu peut le faire réapparaitre quand tu veut.
Hors ligne
C'est aussi simple que ca ? ^^ node->setVisible(false);
Arf.. je suis vraiment un noob :S...
Desole de flooder le forum avec autant de question ^^ (et j'en aurais encore d'autre )
ET encore merci d'y repondre ca m'aide grandement
Hors ligne
yellowdude :
C'est aussi simple que ca ? ^^ node->setVisible(false);
presque oui, il y a un truc qui le dit http://irrlicht.sourceforge.net/docu/cl … 03afe6838c
yellowdude :
Arf.. je suis vraiment un noob :S..
y a pas de problème, si tu est sur un forum, c'est sans doute parce que tu a des lacune, mais on ne serais pas ici si on n'en avait pas n'ont plus (enfin moi au moins)
yellowdude :
Desole de flooder le forum avec autant de question
ne t'excuse pas, le forum est fait pour çà, et (mais personnellement) il vaut mieux voir un forum plein de petite question MAIS vivant, qu'un forum bien mort.
Sinon pour ton problème, oui c'est pas plus bête qu'un "node->setVisible(false);" SAUF si tu créer des collisions avec ce node, dans quel cas un setVisible(bool); ne suffiras pas, car un autre mesh pourra toujours collisioner avec (même si on le voit pas), a la place je connais un autre truc qui permet de le supprimé, mais deffinitivement (il te seras impossible de le faire réapparaître, sauf si tu réutilise un scenenode a chaque fois). je me permet de le remettre car j'ai vu plusieurs personne personne qui cherchais a le faire. voir ici :
http://irrlicht-fr.org/viewtopic.php?id=1325
Bon courage pour la suite, et n'hésite pas si tu as besoin
Dernière modification par nabouill (21-06-2010 12:54:04)
Hors ligne
api, api, api ! non dit dious elle existe !
irr::scene::ISceneNode -> reference des variables ET fonctions : http://irrlicht.sourceforge.net/docu/cl … e_node.htm
irr::scene::ISceneNode::remove(); -> suprime de la scene et le pointeur : http://irrlicht.sourceforge.net/docu/cl … 9403b8b69c
irr::scene::ISceneNode::removeAll(); -> suprime de la scene et les pointeurs de tout les parents : http://irrlicht.sourceforge.net/docu/cl … 9403b8b69c
! attention tout de même il me semble que les pointeur ne sont pas mis a 0 après l'apelle
*mode synique : wouha vive le bricolage pour les solution en se moment*
Hors ligne
c'est peut-être moi qui m'y prend mal, mais chaque fois que j'ai voulus faire un ->remove(); ou removeAll();
Mon programme plante aussitôt !!!
Même un removeChild(fils); plante si je ne lui réattribue pas un autre fils directement !
D'où mon petit "bricolage" de faire un ->setVisible(bool) si j'ai besoin de le faire disparaitre et réapparaitre, ou un sceneMgr->createDeleteAnimator(time); si je veux le supprimé définitivement.
Mais si quelqu'un peut me faire une petite démo comment que roule pour de vrais le remove() et removeAll() je suis preneur.
Dernière modification par nabouill (22-06-2010 13:12:24)
Hors ligne
et bien oui si tu stocke ton ISceneNode* en externe et que tu l'utilise après avoir faire un remove() il est inévitable que cela plante
pour cela il te faut faire
node->remove();
node = 0;
et rajouter une condition << if(node) node->function_or_variable ... >>, personellement je fait comme ça et cela marche très bien.
sinon dans les code source irrlicht il passe par "drop();"
Hors ligne
Allais encore un post en retard:
Cela plante car il existe surement un triangleselector associé au Node que tu veux détruire.
Avant de détruire ton node avec la methode removechild, retire le triangleselector du node au metatriangleselector.
ex:
_meta->removeTriangleSelector(node->getTriangleSelector());
SceneManager->getRootSceneNode()->removeChild(node);
voila a+, thoced
Hors ligne
poster 2mois après je ne voi pas trop l'utiliter
de plus il n'était pas question de triangle selector et si tu regarde d'un peut plus pret les sources, le triangle selector est suprimmer avec le node ...
node->remove(); est mieux que SceneManager->getRootSceneNode()->removeChild(node); car le node n'est pas forcement parent du "root"
Hors ligne
J'ai posté ceci car j'ai eu récemment le même soucis et même si tu indique que dans le code source, le triangle selector est supprimé d'office, j'avais quand même un plantage a l’exécution à la méthode drawall du scenemanager. Je ne me l'explique pas mais la seul solution que j'ai trouvé c'est de supprimer manuellement le triangle selector avant la suppression du node en question.
Ce n'est qu'une ligne de code en plus et cela a résolu mon problème.
Je trouvais bon de poster ma solution même si il en existe certainement d'autres ou même si le problème ne vient peut être pas de là. D''autres personnes sont peut être tomber sur le même soucis.
a+, thoced
PS : dans lecode du destructeur du ISceneNode, il drop le triangle selector du node, mais cela ne marchait pas dans mon cas ( a nouveau je ne me l'explique pas). j'ai du simplement préciser au metatriangleselector de supprrimer le triangleselector du node
Dernière modification par thoced (25-10-2011 20:16:52)
Hors ligne