#0 

29-06-2010 17:16:38

narugohan
Abonné
Date d'inscription: 24-03-2009
Messages: 113

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


#1 

29-06-2010 20:16:05

narugohan
Abonné
Date d'inscription: 24-03-2009
Messages: 113

c bon laissé tombé, j'ai eu une illumination xD

Hors ligne


#2 

02-07-2010 10:48:10

ramis
Membre
Date d'inscription: 27-10-2008
Messages: 92

Détailles un peu ton illumination, j'ai plus ou moins eu le même problême récemment :p

Hors ligne


#3 

02-07-2010 23:31:04

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

je connais bien un truc qui marche, mais c'est un peut bricolage. mais ça marche.
http://irrlicht-fr.org/viewtopic.php?id=1311


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

Hors ligne


#4 

03-07-2010 14:42:45

Zorian
Correcteur
Date d'inscription: 12-05-2009
Messages: 19
Corrections: 181

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

Code:

#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

Code:

#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

Code:

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


Real Programmers Don't Document - If it was hard to write, it should be hard to understand.

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