Message #11774
Sujet: Séquenceur d'animation de personnage
| Type | Date | Auteur | Contenu |
|---|---|---|---|
| Création du message | 17-03-2017 22:21:58 | Magun |
Ok mais ce qui m'inquiète c'est de tester le cerclage de la position de la zone de l'objet et la comparer à la position du personnage en continue, çà mange pas mal de ressources non ? uniquement quand l'utilisateur le demande donc trèds rarement par rapport au frame rate ... (event clavier / souris spécifique genre F ou E en générale) "c" est la pour représenter un état abstrait, ok, c'est un peut étrange au début d'autant plus que finalement "c" n'a aucune donner (sizeof(AnimationSwitch)==0)... 1) Comment tu construit tas suite d'animation ? (Je ne comprend pas le rôle du "c" ? il est la en faite uniquement pour avoir une interface commune avec la spécialization de template, donc les différentes fonctions enter/event mais plus tard, toi tu pourras stocker un pointeur vers NodePlayer pour la suite d'animation tu regarde les fonctions "event" exemple template <> int AnimationSwitch::event<ST_ANIM_1>() { cout << "event 1" << endl; return ST_ANIM_2; }; dit exactement: dans l'état ST_ANIM_1 la fonction event doit faire: afficher event 1 donner le prochain état ici ST_ANIM_2 pour l'exemple j'ai fait: 0 -> 0 (bouclage sur l'animation stand) 1 -> 2 -> 3 -> 0 (suite d'animation 1,2,3 et retour sur l'état "normal" ie: stand) 2) Comment faire si je veux faire une seule animation par touche ? ( ex : Z = marcher ; E = sauter ; A = attaquer) tu auras probablement besoin de plus d'état: tu rauras probablement, toujours 0 -> 0 tu ajoute l'animation n°"x" et tu retourne à l'état normal: x -> 0 tu ajout simplement le code suivant pour forcer le changement d'état: case irr::KEY_KEY_BLABLABLA: Event eOn = {ST_ANIM_X}; sm.work(eOn); return true; 3) Pour animer avec le ninja.b3d j'utilise setframeloop() ? Car setMD2Animation n'est pas compatible si ? uhm en faite setMD2Animation utilise des indices de frame prédéfinit et normaliser par MD2, mais si ton perso a les mêmes ça doit probablement marcher setFrameLoop me semble bien, ça fait longtemp que je n'ai pas regarder de ce coter la ^^, je ne suis pas sûr de l'event irr::scene::IAnimationEndCallBack dans ce cas précis 4) Si je veux mettre une animation par touche, quand j'enléve "&& !event.KeyInput.PressedDown" , si je reste appuyé sur le bouton Z je constate que l'animation est bloquée quand elle arrive à la fin du "walk". oui, uhm ba simplement par ce qu'il n'y a pas de nouvelle event, donc pas de "répétition" ce que tu peux faire, dans ce cas, c'est de définir les animations "continue" comme ça: stand -> stand, run -> run (donc en gros un bouclage) quand tu detecte un relachement de la touche tu retourne à l'état 0 mais ça ne marcheras pas dans tous les cas ( exemple "stand -> run -> jump", normalement tu retourne a "run") ça veux dire qu'il faudrais définir une fsm dynamique avec une stack, des prioritées, ... etc pour ça je te renvoie à notre discution précédante http://irrlicht-fr.org/viewtopic.php?id=1822 après tu pourrais detecter la fin de la frame quelle touche sont encore en état "d'appuie" et relancer l'animation courante avec un forçage: la fonction work() dans AnimationStateMachine |
| Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
|---|---|---|---|---|
|
Préférences cookies Corrections |
![]() ![]() ![]() ![]() |
Propulsé par Django xhtml 1.0 css 2.1 |
884 membres 1440 sujets 11337 messages |
Dernier membre inscrit: Saidov17 152 invités en ligne membre en ligne: - RSS Feed |