Bonjours à tous,
je suis entrain de faire un système de combat pour mon jeu, et j'ai besoin de savoir quand par exemple l'animation de mon coup de poing est terminé( quand il est arrivé au dernier frame que j'ai demandé ). Problème, je ne c'est pas comment faire.
J'ai trouvé cette fonction : "virtual void OnAnimationEnd (IAnimatedMeshSceneNode *node)=0", mais je ne comprend pas comment l'utiliser.
Si quelqu'un c'est comment l'utilisé ou à une idée pour savoir quand mon animation est temriné
Je vous en remercie d'avance
Cordialement Narugohan
PS : voici la page pour la fonction que j'ai trouvé : http://irrlicht.sourceforge.net/docu/cl … l#_details
Hors ligne
c bon laissé tombé, j'ai eu une illumination xD
Hors ligne
Détailles un peu ton illumination, j'ai plus ou moins eu le même problême récemment :p
Hors ligne
je connais bien un truc qui marche, mais c'est un peut bricolage. mais ça marche.
http://irrlicht-fr.org/viewtopic.php?id=1311
Hors ligne
J'ai trouvé comment marchait OnAnimationEnd().
Tout fonctionne bien avec ce code (qui n'est pas très interressant si ce n'est pour découvrir le fonctionnement de OnAnimationEnd).
Main.cpp
#include <irrlicht.h> #include "CAnimationEndCallBack.h" using namespace irr; int main(void) { IrrlichtDevice *device = createDevice (video::EDT_OPENGL, core::dimension2d<u32>(800,600),32,false,true,false,0); video::IVideoDriver* driver = device->getVideoDriver (); scene::ISceneManager *smgr = device->getSceneManager (); smgr->addCameraSceneNodeFPS(); scene::IAnimatedMesh *mesh = smgr->getMesh("sydney.md2"); scene::IAnimatedMeshSceneNode *node = smgr->addAnimatedMeshSceneNode(mesh); node->setFrameLoop(1,15); //on définit la boucle d'animation node->setLoopMode(false); //on désactive la répétition CAnimationEndCallBack *anim = new CAnimationEndCallBack(); //on crée un AnimationEndCallBack node->setAnimationEndCallback(anim); //et on l'assigne au node while (device->run ()) { driver->beginScene(true, true, video::SColor(255,255,255,255)); smgr->drawAll(); driver->endScene(); } device->drop (); return 0; }
CAnimationCallBack.h
#ifndef CANIMATIONENDCALLBACK_H_INCLUDED #define CANIMATIONENDCALLBACK_H_INCLUDED #include <irrlicht.h> using namespace irr; class CAnimationEndCallBack : public scene::IAnimationEndCallBack { public : CAnimationEndCallBack(); ~CAnimationEndCallBack(); void OnAnimationEnd(scene::IAnimatedMeshSceneNode* node); private : bool animationFinie; }; #endif // CANIMATIONENDCALLBACK_H_INCLUDED
CAnimationCallBack.cpp
#include "CAnimationEndCallBack.h" CAnimationEndCallBack::CAnimationEndCallBack() : animationFinie(false) { } CAnimationEndCallBack::~CAnimationEndCallBack() { } void CAnimationEndCallBack::OnAnimationEnd(scene::IAnimatedMeshSceneNode *node) { if(!animationFinie) { //tu sais que l'animation est maintenant finie, tu as un pointeur vers le node pour les modifications que tu souhaites faire animationFinie = true; } }
Pour résumer, OnAnimationEnd est automatiquement appelé à la fin de l'animation de ton personnage si la répétition de la boucle est désactivée et si tu lui as assigné un AnimationEndCallBack.
Après, ça oblige à refaire une classe juste pour redéfinir OnAnimationEnd.
Hors ligne