Historique des modifications - Message

Message #11635

Sujet: Système d'animation d'irrlicht


Type Date Auteur Contenu
Création du message 10-06-2015 23:35:47 Magun
très bien, bon j'ai passer du temps a comprendre ou étais le soucis
si j'ai réellement compris d'ailleurs ... j'ai réadapté mon "esquisse" de départ

j'en suis donc arriver ici

Code c++ :


class AnimationBinder
{
	public:
		virtual void bind() = 0;
		virtual void unbind() = 0;
		virtual void priority() = 0;
		
		bool operator < (AnimationBinder *other)
		{
			return priority() < other->priority();
		}
		
		bool activated;
		bool binded;
};

class AnimationManager
{
	public:
		AnimationManager()
		{
			anim.push_back(new ...);
			...
			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(auto it : anim)
				if(current < it && it.activated)
					current = it;
			
			if(current.activated && !current.binded)
				current.bind();
		}
	private:
		irr::core::array<AnimationBinder*> anim;
};


pourquoi ne pas simplement utiliser un system de priorité ?
couplet avec deux états "actif" et "en utilisation" ?

seul l'animation aillent la plus forte priorité resteras active,
ce qui te permet d'activer/désactiver n'import qu'elle animation sans te soucier du reste
par exemple atacker auras probablement la plus grosse prioriter, suivras du saut, et de la marche
pour ce qui est du véhicule, je ne pensse pas que ça pose de soucis de la laisser a ça place
(ou au pire faire un "AnimationBinder" de prioriter maximal ?)

et donc il te suffi d'implementer "AnimationBinder"

Code c++ :


class RunningState : public AnimationBinder
{
	public:
		virtual void bind()
		{
		   binded = true;
		   NePlayer->setAnimationSpeed(ANIMATION_SPEED);
		   NePlayer->setLoopMode(true);
		   NePlayer->setFrameLoop(0,80);
		}
		virtual void unbind()
		{
		   binded = false;
		   NePlayer->setAnimationSpeed(ANIMATION_SPEED);
		   NePlayer->setLoopMode(false);
		   NePlayer->setFrameLoop(0,0);
		}
		virtual int priority()
		{
			return 0;
		}
};


dit moi ce que tu en pensse ? smile
ou si je suis à côté de la plaque ?

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