Historique des modifications - Message

Message #11662

Sujet: Système d'animation d'irrlicht


Type Date Auteur Contenu
Dernière modification 14-06-2015 17:35:30 jonath313
Ok je préfére rester sur un territoire connu et itérer de manière classique, j'ai alors modifier le code et là çà compile :

Code c++ :


#ifndef CPLAYERANIMATION_H
#define CPLAYERANIMATION_H

#include "irr/irrArray.h"
#include <stdlib.h>
#include <stdio.h>
#include <cstdio>
#include <string>
#include <iostream>
#include <direct.h>
#include <windows.h>
#include <time.h>
#include <cstdlib>
#include <vector>
#include <irr/irrlicht.h>

class AnimationBinder
{
    public:
        virtual void bind() = 0;
        virtual void unbind() = 0;
        virtual int priority() = 0;

        bool operator < (AnimationBinder *other)
        {
            return priority() < other->priority();
        }

        bool activated;
        bool binded;
};

template<int Apriority, int start, int end, bool loop = false>
class RunningState : public AnimationBinder
{
    public:
        virtual void bind()
        {
           binded = true;
           /*NePlayer->setAnimationSpeed(ANIMATION_SPEED);
           NePlayer->setLoopMode(loop);
           NePlayer->setFrameLoop(start,end);*/
        }
        virtual void unbind()
        {
           binded = false;
          /* NePlayer->setAnimationSpeed(ANIMATION_SPEED);
           NePlayer->setLoopMode(false);
           NePlayer->setFrameLoop(0,0);*/
        }
        virtual int priority()
        {
            return Apriority;
        }

};

class AnimationManager
{
    public:
        AnimationManager(int start, int end, bool loop = false)
        {
            anim.push_back(new RunningState<1, 0, 80, true>());
            ///...
            ///anim.sort();
        }
        void activate(int animNumber, bool value)
        {
            auto current = anim[animNumber];
            current->activated = value;

            if(current->binded && !value)
                current->unbind();

            current = anim[0];

                 for(int i = 0; i<anim.size(); ++i)
                    if(current < anim[i] && anim[i]->activated)
                        current = anim[i];

                    if(current->activated && !current->binded)
                        current->bind();
        }


    private:
         std::vector<AnimationBinder*> anim;

};

#endif // CPLAYERANIMATION_H


Pense tu que ce code est utilisable où j'ai ajouté des erreurs ?

Une autre question me vient à l'éspris, quand tu écris " anim.sort();" çà signifie quoi concrètement ?

Existe t-il un équivalent de ".sort()" pour les std::vector ???

Deplus, dans la ligne "anim.push_back(new RunningState<1, 0, 80, true>());" , je ne peux pas passer 'start' et 'end' à la place de 0 et 80 çà vient de quoi ?

bon cependant j'utilise des syntaxes particulière qui ton semer le doute, j'en suite navré

Tu n'as pas à être navré, au contraire, tu m'aide beaucoups, grâce à toi je vais enfin pouvoirs comprendre ces notions abstraites smile
Et oui forcément je doute beaucoup sur ce que je fais car pour le moment il faudrait que je comprenne bien avec un type array ou vector pour pouvoirs me dire plus tard que je choisirais l'un ou l'autre. çà me permet de voir aussi que je ne peux pas procéder toujours de la même façon en fonction du type choisit.
Création du message 14-06-2015 17:28:51 jonath313
Ok je préfére rester sur un territoire connu et itérer de manière classique, j'ai alors modifier le code et là çà compile :

Code c++ :


#ifndef CPLAYERANIMATION_H
#define CPLAYERANIMATION_H

#include "irr/irrArray.h"
#include <stdlib.h>
#include <stdio.h>
#include <cstdio>
#include <string>
#include <iostream>
#include <direct.h>
#include <windows.h>
#include <time.h>
#include <cstdlib>
#include <vector>
#include <irr/irrlicht.h>

class AnimationBinder
{
    public:
        virtual void bind() = 0;
        virtual void unbind() = 0;
        virtual int priority() = 0;

        bool operator < (AnimationBinder *other)
        {
            return priority() < other->priority();
        }

        bool activated;
        bool binded;
};

template<int Apriority, int start, int end, bool loop = false>
class RunningState : public AnimationBinder
{
    public:
        virtual void bind()
        {
           binded = true;
           /*NePlayer->setAnimationSpeed(ANIMATION_SPEED);
           NePlayer->setLoopMode(loop);
           NePlayer->setFrameLoop(start,end);*/
        }
        virtual void unbind()
        {
           binded = false;
          /* NePlayer->setAnimationSpeed(ANIMATION_SPEED);
           NePlayer->setLoopMode(false);
           NePlayer->setFrameLoop(0,0);*/
        }
        virtual int priority()
        {
            return Apriority;
        }

};

class AnimationManager
{
    public:
        AnimationManager(int start, int end, bool loop = false)
        {
            anim.push_back(new RunningState<1, 0, 80, true>());
            ///...
            ///anim.sort();
        }
        void activate(int animNumber, bool value)
        {
            auto current = anim[animNumber];
            current->activated = value;

            if(current->binded && !value)
                current->unbind();

            current = anim[0];

                 for(int i = 0; i<anim.size(); ++i)
                    if(current < anim[i] && anim[i]->activated)
                        current = anim[i];

                    if(current->activated && !current->binded)
                        current->bind();
        }


    private:
         std::vector<AnimationBinder*> anim;

};

#endif // CPLAYERANIMATION_H


Pense tu que ce code est utilisable où j'ai ajouté des erreurs ?

Une autre question me vient à l'éspris, quand tu écris " anim.sort();" çà signifie quoi concrètement ?

Existe t-il un équivalent de ".sort()" pour les std::vector ???

Deplus, dans la ligne "anim.push_back(new RunningState<1, 0, 80, true>());" , je ne peux pas passer 'start' et 'end' à la place de 0 et 80 çà vient de quoi ?

bon cependant j'utilise des syntaxes particulière qui ton semer le doute, j'en suite navré

Tu n'as pas à être navré, au contraire, tu m'aide beaucoups, grâce à toi je vais enfin pouvoirs comprendre ces notions abstraites smile
Et oui forcément je doute beaucoup sur ce que je fais car pour le moment il faudrait que je comprenne bien avec un type array ou vector pour pouvoirs me dire plus tard que je choisirais l'un ou l'autre. çà me permet de voir aussi que je ne peux pas procéder toujours de la même façon en fonction du type choisit.

Retour

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
153 invités en ligne
membre en ligne: -
RSS Feed