Historique des modifications - Message

Message #10584

Sujet: S'accroupir Irrlicht


Type Date Auteur Contenu
Création du message 03-07-2012 18:29:00 johnplayer
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

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