Bonjour,
Cela fait plusieurs fois que je suis confronté au même problème. J'aimerais appeler dans ma boucle de rendu une fonction qui fait un Node->removeChild(). Le soucis c'est que selon les conditions que je test l'appel à ma fonction s'effectue plusieurs fois et ducoups le removeChild() est appelé alors que l'enfant n'existe plus. J'ai tout essayé avec des test booleens mais rien n'y fait j'ai le droit à un jolis plantage !
Dans ma boucle de rendu :
Enfait je voudrais realiser ce changement d'etat :
Ordre de perte du bras (donnee d'entree) : Resultat de ma variable de test pour l'appel de la fonction : 0 1 0 1 0 1 0 1 1 -> passage de collision entre les nodes 0 -> un seul changement 1 1 1 1 1 1 0 1 0 1
Si quelqu'un à la réponse, merci d'avance.
Dernière modification par jonath313 (19-03-2014 23:19:57)
Hors ligne
Teste l'existance du node!
Si ça persiste, c'est que ton node est utilisé par une autre partie de ton programme (par exemple, ton test de collision).
Hors ligne
Oui merci c'est exactement çà, je viens juste de le corriger, enfait je faisais un setframeloop() dans une autre fonction qui appelait toujours le node du bras (sans condition).
je me suis aussi aperçut que le removechild fait disparaitre le bras alors que moi je voulais juste le décrocher et le laisser à l'endroit où il à été décroché.(voir par la suite le faire tomber sur le sol)
Du coups je me suis dis que çà serait plus fun de relier les OS des membres séparés d'un personnage pour pouvoirs le démembrer et là je me rend comptes que déjà niveaux code c'est lourd à gérer et ensuite que deux bones ne se lient pas. (je peux me tromper dans mes paroles hein...)
irr::scene::IBoneSceneNode* OSBrasDroiteH = NBrasDroite->getJointNode("Bone16"); irr::scene::IBoneSceneNode* OSTroncEpauleDrte = NTronc->getJointNode("Bone30"); OSTroncEpauleDrte ->addChild(OSBrasDroiteH);
Sinon j'ai essayé çà mais idem çà ne fonctionne pas ... le bras disparaît et moi je veux juste le détacher de son parent :
NBrasDroite->grab() ; NBrasDroite->setParent(0); NBrasDroite->drop() ;
Savez-vous comment je peux réaliser le démembrements svp ? (sinon j'avais pensé mettre le bras enfant du terrain plutot que de le remove mais çà me plait pas ).
Dernière modification par jonath313 (20-03-2014 23:05:04)
Hors ligne
tu peux toujours le cacher au lieu de le détruire avec "ISceneNode::setVisible(bool visible);".
Niveau perf je ne suis pas sûr que ça dérange beaucoup mais au moins, tu peux faire réapparaitre ton node si besoin.
Hors ligne
Non c'est pas ce que je veux faire. Avant le addchild j'ai 2 node et après ils sont collé ensemble. Mais si je veux supprimer cette liaison pour retrouver 2 node bien distinct je fait comment? Je veux supprimer la liaison et pas un node.
Hors ligne
Ton node disparait peut-être parce qu'il n'a plus la bonne position. Tu peut toujours essayer ça:
Hors ligne
Ok j'ai fais le test de passer le parent au terrain mais du coups le bras sectionné est bien séparé mais est joint au terrain à un emplacement précis, il ne tombera donc pas sur le sol.
Pour faire simple, je n'utilise plus de addchild() ou de setParent(), je place directement les membres de mon personnage aux positions et rotations de celui-ci. Quand j'ai collision, j'arréte de faire suivre les membres au personnage. Comme cela il s'arrétent à la position de collision. Je leur impose une gravité sur leur animator de collision en faisant un anim->setGravity(Gravite) et là ils tombent sur le sol.
Donc problème résolu. Merci de vos réponses çà m'a bien aidé dans mon raisonnement.
Par la suite je pense que je devrais utiliser un moteur physique pour que le bras tombe bien allongé sur le sol.
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 48 invités en ligne Aucun membre connecté RSS Feed |