#0 

26-08-2010 23:12:57

Altair
Petit nouveau
Date d'inscription: 26-08-2010
Messages: 2

Bonjour à tous,

Voilà je développe un jeu avec Irrlicht et Codeblocks et j'ai besoin de supprimer une node et de la recréer juste ensuite à un endroit différent.
Le problème est que le programme crash lorsqu'il arrive à cet endroit. Le bout de code concerné :

Code:

node->remove();
node = 0;
scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(model);
node->getMaterial(0) = material2;
node->setPosition(core::vector3df(5,-1000,5));
node->setRotation(core::vector3df(0,90,0));
node->setLoopMode(true);
node->setMD2Animation(scene::EMAT_STAND);

Ce bout de code se situe dans la boucle de rendu.
Plus tôt, en dehors de la boucle, j'avais déclaré :

Code:

video::SMaterial material2;
material2.Texture1 = driver->getTexture("3D/texture.jpg");
scene::IAnimatedMesh* model = smgr->getMesh("3D/player.md2");

scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(model);
node->setPosition(core::vector3df(spotx[3],0,spoty[3]));
node->setRotation(core::vector3df(0,srotz[3],0));
node->getMaterial(0) = material2;
node->setMD2Animation(scene::EMAT_STAND);

Aidez-moi vite s'il vous plait car c'est pour une compétition.
Merci beaucoup,

Altair.

Hors ligne


#1 

26-08-2010 23:26:32

iLambda²
Membre
Date d'inscription: 07-02-2010
Messages: 29

Salut Altaïr !
Je pense que le problème est le fait que ton code qui recrée le node soit situé dans la boucle de rendu car ton ordinateur le recrée a chaque fois. D'autre part, ton fichier 3D peut contenir une erreur de frappe au niveau du nom. Si rien ne marche, ça peut aussi être parce que tu réécris

Code:

 scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(model);

alors qu'il suffirait d'un

Code:

 node = smgr->addAnimatedMeshSceneNode(model);

smile Voila big_smile Teste et dit moi, je te rerépondrai si tu as besoin smile

Assassin's Creed ca roxx tongue

Dernière modification par iLambda² (26-08-2010 23:26:45)

Hors ligne


#2 

26-08-2010 23:42:09

nico
Webmaster
Date d'inscription: 07-08-2009
Messages: 563
Corrections: 9

Altair :

... c'est pour une compétition.....


c'est quoi cette compet ?   roll

Hors ligne


#3 

27-08-2010 13:03:02

Altair
Petit nouveau
Date d'inscription: 26-08-2010
Messages: 2

iLambda² :

Salut Altaïr !
Je pense que le probleme est le fait que ton code qui recrée le node soit situé dans la boucle de rendu car ton ordinateur le recrée a chaque fois. D'autre part, ton fichier 3D peut contenir une erreur de frappe au niveau du nom. Si rien ne marche, ca peut aussi etre parceque tu réécrit

Code:

 scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(model);

alors qu'il suffirait d'un

Code:

 node = smgr->addAnimatedMeshSceneNode(model);

smile Voila big_smile Teste et dit moi, je te rerépondrait si tu as besoin smile


Merci beaucoup pour ton aide smile !
Le code qui recrée le node est situé dans une condition qui ne s'éxécute qu'une seule fois, et le fichier 3D se charge très bien au début, c'est lorsque vient le moment de le supprimer et de le replacer à un nouveau endroit que ça crash.
En fait si tu vais je fais un jeu de zombies et une fois que le zombie est rentré dans l'hopital, si il est tué, je peux pas le faire ressortir parce qu'il est bloqué par les murs de l'hopital. Il faut donc que je le supprime et que je le recrée en dehors, pour le téléporter en quelque sorte.

En effet si je ne supprime pas le node et que je fais node = smgr->addAnimatedMeshSceneNode(model);, alors ça ne crash pas, mais le cadavre de l'ancien zombie reste par terre alors que je veux qu'il disparaisse (De l'écran et de la mémoire lol).
Est-ce que tu penses que je peux supprimer l'animator de collision de la node, la bouger, et la lui ré-assigner ensuite, même si j'ai fais animator->drop() après l'avoir crée en dehors de la boucle ?
Merci encore !

nico :

[quote=Altair]... c'est pour une compétition.....


c'est quoi cette compet ?   roll[/quote]
Je voulais pas trop le dire car j'ai cru comprendre que vous le détestiez ici, mais c'est pour cette compétition :
http://www.psp-hacks.com/2010/05/17/hom … rror-show/
J'utilise le LTE game engine, une adaptation de Irrlicht sur PSP. Je fais mes tests sur l'ordinateur avec le vrai Irrlicht et Codeblocks d'abord, puis je porterais mon projet sur PSP ensuite.

Dernière modification par Altair (27-08-2010 13:53:40)

Hors ligne


#4 

27-08-2010 14:55:18

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

ba pourquoi ne pas faire un simple setPosition ? o.O
je veux dire où est l'intérêt ? aurais tu une autre contrainte ? physique (autre que les babioles de irrlicht) ?
supprimer et recréer, ça aurait été envisageable si tu changeais des données critiques, mais irrlicht est plutôt safe de ce côté là ...

sinon tu peux faire un node->drop ?
il est probable que tu utilises plusieurs fois le mesh, là où node->remove le supprime également, il me semble qu'il ne fait qu'un drop du mesh pourtant
mais si c'est un <<driver->removeHardwareBuffer ?>> du coup tes autres nodes se retrouvent avec un pointeur invalide ?

ps1: je ne connais pas LTE engine, mais il ne faut pas exclure un bug de celui-ci, essaye de mettre à jour ...
ps2: à ma connaissance personne ne déteste les concours ici, mais ça ne me fait pas non plus sauter de joie ... wink

edit: essaye de corriger hmm

Dernière modification par Magun (27-08-2010 14:57:48)

Hors ligne


#5 

28-08-2010 00:05:09

TUpac
Habitué
Date d'inscription: 08-09-2009
Messages: 387
Corrections: 1

+3 magun smile
pourquoi reloader un mesh quant il suffit de le téléporter ?
s'il doit attendre tu le cache :

Code:

setVisible(bool)

Donc +1 pour cette réponse pertinente.
et +2 pour l'écriture parfaite wink

ps: tu aurais pu te donner la peine de faire un tableau de chaines pour tes ps[] :p


"Si vous ne partagez pas votre stabilité avec les pauvres, les pauvres partageront leur instabilité avec vous."

Hors ligne


#6 

28-08-2010 01:29:07

nico
Webmaster
Date d'inscription: 07-08-2009
Messages: 563
Corrections: 9

Altair :

Je voulais pas trop le dire car j'ai cru comprendre que vous le détestiez ici


détester quoi ? le LTE engine ? je n'ai pas souvenir qu'on en ai parlé ici, sinon j'ai déjà prog vite fait sur psp et je me souviens que c'est un vrai défi, donc bon courage wink

c'est moi ou ça sent le dialogue de sourds récursif ici ? wink

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
126 invités en ligne
Aucun membre connecté
RSS Feed