#1 

26-08-2010 21:12:57

Altair
Membres
Date d'inscription:
Messages: 2
IP: 82.227.241.186
Courriel

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é :

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é :
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


#2 

26-08-2010 21:26:32

iLambda²
Membres
Avatar de iLambda²
Date d'inscription:
Messages: 29
IP: 90.35.207.248
Courriel

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

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

alors qu'il suffirait d'un
 node = smgr->addAnimatedMeshSceneNode(model);

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

[HS] Assassin's Creed ca roxx tongue [/HS]


Hors ligne


#3 

26-08-2010 21:42:09

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

Altair Ecris:

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

c'est quoi cette compet ? roll


Hors ligne


#4 

27-08-2010 11:03:02

Altair
Membres
Date d'inscription:
Messages: 2
IP: 82.227.241.186
Courriel

iLambda² Ecris:

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
 scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(model);

alors qu'il suffirait d'un
 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 Ecris:

[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/homebrew-idol-3-the-homebrew-horror-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.


Hors ligne


#5 

27-08-2010 12:55:18

Magun
Administrateurs
Avatar de Magun
Date d'inscription:
Messages: 910
IP: 188.93.45.30
Courriel  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

Hors ligne


#6 

27-08-2010 22:05:09

TUpac
Membres
Avatar de TUpac
Date d'inscription:
Messages: 387
IP: 88.168.3.38
Courriel

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

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


#7 

27-08-2010 23:29:07

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

Altair Ecris:

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

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


Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
172 invités en ligne
membre en ligne: -
RSS Feed