Historique des modifications - Message

Message #10584

Sujet: S'accroupir Irrlicht


TypeDateAuteurContenu
Création du message03-07-2012 18:29:00johnplayer
Comme ça, je dirais qu'il faut capter l'événement du bouton affecté à la fonction "s'accroupir". Je suppose que tu as mis un animator de collision donc il faut voir s'il y a possibilité de modifier la collision en hauteur. La solution la plus propre serait de créer ta propre cameraFPS en reprenant le code d'irrlicht et en y ajoutant la création de la collision à la création de la camera et la fonction "s'accroupir" dans la KeyMap et en implémentant l'action associée. L'implémentation de la camera est dans "source/CSceneNodeAnimatorCameraFPS.cpp". Pour la keymap et l'enum KEY_ACTION, c'est dans "include/SKeyMap.h". Soit tu modifies le code source d'Irrlicht (ce que je ne ferais pas car c'est à refaire si tu changes de version entre temps), soit tu copies (en changeant les noms de fichier, de classe et d'enum) les fichiers "source/CSceneNodeAnimatorCameraFPS.cpp et .h" et "include/SKeyMap.h".

1/ ajouter EKA_ACCROUPIR à EKEY_ACTION;
2/ ajouter dans le constructeur "KeyMap.push_back(SKeyMap(EKA_ACCROUPIR, irr::KEY_LSHIFT));" (j'ai mis LSHIFT pour l'exemple mais tu mets ce que tu veux);
3/ dans "CSceneNodeAnimatorCameraFPS::animateNode(...)" tu as :
if (CursorKeys[EKA_JUMP_UP])
	{
		const ISceneNodeAnimatorList& animators = camera->getAnimators();
		ISceneNodeAnimatorList::ConstIterator it = animators.begin();
		while(it != animators.end())
		{
			if(ESNAT_COLLISION_RESPONSE == (*it)->getType())
			{
				ISceneNodeAnimatorCollisionResponse * collisionResponse =
					static_cast<ISceneNodeAnimatorCollisionResponse *>(*it);

				if(!collisionResponse->isFalling())
					collisionResponse->jump(JumpSpeed);
			}

			it++;
		}
	}

Inspires t'en pour pour savoir comment accéder à l'animateur de collision et implémenter :
if (CursorKeys[EKA_ACCROUPIR])
{
/// change la hauteur de l'ellipse avec ISceneNodeAnimatorCollisionResponse::setEllipsoidTranslation();
}

J'espère avoir été assez clair, je viens juste de regarder les sources donc c'est plus une piste qu'une solution. En tout cas, le principe est là.

Retour

OptionsLiens officielsCaractéristiquesStatistiquesCommunauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1441 sujets
11339 messages
Dernier membre inscrit: Saidov17
93 invités en ligne
membre en ligne: -
RSS Feed