Historique des modifications - Message

Message #11647

Sujet: Système d'animation d'irrlicht


Type Date Auteur Contenu
Création du message 13-06-2015 20:44:47 Magun
OOOk smile
bon il va falloir éclaircir quelque point !

irr::core::array<AnimationBinder*> si tu veut c'est la même chose que AnimationBinder*[size]
mais du coup géré via une class pour les (re/des)allocations

Je me demande où "anim" a été déclarée.

si tu as déjà du mal avec le concepts de base des classes effectivement, l'héritage est peut être un peut prématuré
anim est déclarer dans AnimationManager, quand tu crée une instance de class une zone mémoire est réserver avec la taille de celle si,
ce qui inclue les objets qui y sont déclaré, ici "anim", pareil pour les fonctions, et l'héritage (vtable)
si tu maitrise le C je peut a la rigueur t'expliquer comment ont peut écrire une class et de l'héritage en C
si tout fois tu est à l'aise les pointeurs sur fonctions

Code c++ :


typedef struct AnimationManager
{
	irr::core::array<AnimationBinder*> anim;
};

void AnimationManagerActivate(AnimationManager *tmp, int animNumber, bool value)
{
	auto current = tmp->anim[animNumber];
	current->activated = value;

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

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

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

AnimationManager* ConstructAnimationManager()
{
	AnimationManager *tmp = malloc(sizeof(AnimationManager));
	tmp->anim.push_back(new "?");
	tmp->anim.sort();
	tmp->activate = &AnimationManagerActivate;
	return tmp;
}


et du coup pour l'héritage:

Code c++ :

typedef struct AnimationBinder
{
	void (*bind)(AnimationBinder*);
	void (*unbind)(AnimationBinder*);
	int  (*priority)(AnimationBinder*);
	
	bool activated;
	bool binded;
};

// operator '<'
void AnimationBinderCmp(AnimationManager *tmpA, AnimationManager *tmpB)
{
	return tmpA->priority() < tmpB->priority();
}

AnimationBinder* ConstructAnimationBinder()
{
	AnimationBinder *tmp = malloc(sizeof(AnimationBinder));
	tmp->bind = 0;
	tmp->unbind = 0;
	tmp->priority = 0;
	return tmp;
}

//======================================

typedef struct RuningState
{
	AnimationBinder base;
	irr::scene::IAnimatedMesh *NePlayer;
};

void RuningStateBind(AnimationBinder *tmp)
{
	RuningState *real = static_cast<RuningState*>(tmp);
	tmp->binded = true;
	real->NePlayer->setAnimationSpeed(ANIMATION_SPEED);
    real->NePlayer->setLoopMode(true);
    real->NePlayer->setFrameLoop(0,80);
}

void RuningStateUnBind(AnimationBinder *tmp)
{
	RuningState *real = static_cast<RuningState*>(tmp);
	tmp->binded = true;
	real->NePlayer->setAnimationSpeed(ANIMATION_SPEED);
    real->NePlayer->setLoopMode(false);
    real->NePlayer->setFrameLoop(0,0);
}

int RuningStatePriority(AnimationBinder *tmp)
{
	RuningState *real = static_cast<RuningState*>(tmp);
	return 0;
}

RuningState* ConstructRuningState()
{
	RuningState *tmp = malloc(sizeof(RuningState));
	AnimationBinder *base = static_cast<AnimationBinder*>(RuningState);
	tmp->bind = &RuningStateBind;
	tmp->unbind = &RuningStateUnBind;
	tmp->priority = &RuningStatePriority;
	return tmp;
}


Pour moi "RuningState " est une classe fille qui hérite de "AnimationBinder" . Si je crée un objet de type "RuningState ", celui-ci hériterage des attributs de la classe "AnimationBinder".

"RuningState " est un booléen ?

le début oui, mais que viens faire un booléen ici ?
tu la dit toi même ["RuningState " est une classe fille qui hérite de "AnimationBinder"] donc
"RuningState " c'est un "AnimationBinder" ...

pour rappelle tu peut écrire

Code c++ :

AnimationBinder *machin = new RuningState ();

même chose qui est utiliser pour la gui (IGUIElement et tout c'est dériver, comme les ISceneNode, IMesh, ... etc)
ces classes n'ont aucune consistance, ce sont comme ici des interfaces, ou "patron"
leurs implémentations sont dispos (cacher de l'utilisateur) sous le noms CGUIButton par exemple

je ne sais pas si ça te seras d'une grande aide, j'aurais essayer roll
après si tu veut que je t'explique plus simplement, ça doit pouvoir s'envisager ...

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