#0 

19-06-2010 20:54:40

yellowdude
Membre
Date d'inscription: 07-04-2010
Messages: 17

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

Merci d'avance ^^ smile

Hors ligne


#1 

19-06-2010 23:00:07

nabouill
Abonné
Date d'inscription: 17-09-2009
Messages: 242
Corrections: 1

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.


mes sites: www.manga-vf.fr et www.series-vf.fr

Hors ligne


#2 

20-06-2010 14:09:39

yellowdude
Membre
Date d'inscription: 07-04-2010
Messages: 17

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 tongue)

ET encore merci d'y repondre ca m'aide grandement smile

Hors ligne


#3 

20-06-2010 21:38:39

nabouill
Abonné
Date d'inscription: 17-09-2009
Messages: 242
Corrections: 1

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)


mes sites: www.manga-vf.fr et www.series-vf.fr

Hors ligne


#4 

22-06-2010 12:19:54

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 910
Corrections: 2
Site web

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* wink

Hors ligne


#5 

22-06-2010 13:11:41

nabouill
Abonné
Date d'inscription: 17-09-2009
Messages: 242
Corrections: 1

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)


mes sites: www.manga-vf.fr et www.series-vf.fr

Hors ligne


#6 

23-06-2010 20:44:52

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 910
Corrections: 2
Site web

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


#7 

24-10-2011 19:56:13

thoced
Membre
Date d'inscription: 02-08-2010
Messages: 65

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


#8 

25-10-2011 01:06:43

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 910
Corrections: 2
Site web

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

Code c++ :

        virtual ~ISceneNode()
        {
            // delete all children
            removeAll();

            // delete all animators
            ISceneNodeAnimatorList::Iterator ait = Animators.begin();
            for (; ait != Animators.end(); ++ait)
                (*ait)->drop();

            if (TriangleSelector)
                TriangleSelector->drop();
        }


node->remove(); est mieux que SceneManager->getRootSceneNode()->removeChild(node); car le node n'est pas forcement parent du "root"
wink

Hors ligne


#9 

25-10-2011 20:14:38

thoced
Membre
Date d'inscription: 02-08-2010
Messages: 65

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


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
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
141 invités en ligne
Aucun membre connecté
RSS Feed