#1 

25-01-2010 22:36:49

jonath313
Membres
Date d'inscription:
Messages: 240
IP: 195.221.123.215
Courriel

Je suis entrein de faire le déplacement d'un objet en 3d mais je n'arrive pas à le faire aler dans la direction où il pointe j'ai essayer multiples methodes mais je ne trouve pas, j'ai essayer de faire une rotation progressive pedant un déplacement à droite ou à guauche mais je me suis aperçu que l'objet ne tournait pas autour de lui même mais autour d'un orbite par raport à la caméra ...

Mon code il y a pas grand chose mais au cas où :

#include "CEventReceiver2.h"

CEventReceiver::CEventReceiver(irr::scene::IAnimatedMeshSceneNode* Nmodele)//revoilà notre constructeur smile
{
m_Nmodele = Nmodele;//On pointe le mesh passe en parametre.
m_isAvance = false;//Par défaut , le modele est immobile .Donc le booléen qui indique si l'on bouge est à false
m_animrun=true;//et comme l'animation n'est du coup pas "courir" , on met notre booléen à false aussi
m_isRecule=false;
m_isDroite=false;
m_isGauche=false;
}


bool CEventReceiver::OnEvent(const irr::SEvent &event)//En cas d'évenement :
{
//On verifie que le pointeur est ok
if(m_Nmodele != 0
//Qu'il s'agit d'un event concernant un appui/relachement de touche
&& event.EventType == irr::EET_KEY_INPUT_EVENT
//Qu'il s'agit bien de la touche z
&& event.KeyInput.Key == irr::KEY_KEY_Z)
{
//Si il s'agit d'un appui
if(event.KeyInput.PressedDown == true)
m_isAvance = true;//On passe notre booléen "est en train de bouger" à true


//Sinon c'est un relachement
else
m_isAvance = false;//Donc , comme on doit s'arrêter , on met ce même booléen à false
//L'event est traite, on retourne true
return true;
}
//Si on arrive la, c'est qu'on a pas traite l'event , donc on retourne false

if(m_Nmodele != 0 && event.EventType == irr::EET_KEY_INPUT_EVENT && event.KeyInput.Key == irr::KEY_KEY_S)
{
if(event.KeyInput.PressedDown == true)
m_isRecule = true;
else
m_isRecule = false;
return true;
}
//Si on arrive la, c'est qu'on a pas traite l'event , donc on retourne false

if(m_Nmodele != 0 && event.EventType == irr::EET_KEY_INPUT_EVENT && event.KeyInput.Key == irr::KEY_KEY_D)
{
if(event.KeyInput.PressedDown == true)
m_isDroite = true;
else
m_isDroite = false;
return true;
}
//Si on arrive la, c'est qu'on a pas traite l'event , donc on retourne false

if(m_Nmodele != 0 && event.EventType == irr::EET_KEY_INPUT_EVENT && event.KeyInput.Key == irr::KEY_KEY_Q)
{
if(event.KeyInput.PressedDown == true)
m_isGauche = true;
else
m_isGauche = false;
return true;
}
//Si on arrive la, c'est qu'on a pas traite l'event , donc on retourne false

return false;
}


void CEventReceiver::majPosMesh()//revoilà notre chère fonction de mise à jour de la position
{
//On verifie que le pointeur vers le mesh est
//ok et que la touche est enfoncee
if(m_Nmodele != 0 && m_isAvance == true)
{
//On commence par recuperer la position actuelle
irr::core::vector3df v = m_Nmodele->getPosition();

//On y ajoute la valeur de deplacement
v.Z += 0.1f;
//On renvoie la nouvelle position .Sydney va avancer !!!
m_Nmodele->setPosition(v);
}


if(m_Nmodele != 0 && m_isRecule == true)
{
irr::core::vector3df v = m_Nmodele->getPosition();
v.Z -= 1.1f;
m_Nmodele->setPosition(v);
}

if(m_Nmodele != 0 && m_isDroite == true)
{
//irr::core::vector3df v = m_Nmodele->getPosition();
// v.X += 1.1f;
// m_Nmodele->setPosition(v);
irr::core::vector3df w = m_Nmodele->getRotation();
w.Y += 0.1f;
m_Nmodele->setRotation(w);


}

if(m_Nmodele != 0 && m_isGauche == true)
{
// irr::core::vector3df v = m_Nmodele->getPosition();
// v.X -= 1.1f;
// m_Nmodele->setPosition(v);
irr::core::vector3df w = m_Nmodele->getRotation();
w.Y -= 0.1f;
m_Nmodele->setRotation(w);
}
}

void CEventReceiver::majAnimMesh()//Ici , on met à jour l'animation
{
if(m_Nmodele != 0 && m_isAvance == true && m_animrun ==false) //Si le pointeur vers le mesh est ok , si l'on bouge et si l'on n'a pas encore mis à jour l'animation ...
{
m_Nmodele->setMD2Animation(EMAT_STAND);//on passe à l'animation "courir"
m_Nmodele->setFrameLoop(1,44);
m_Nmodele->setAnimationSpeed(22);
m_animrun=true;//on declare que l'animation courir est bien en trainde se derouler
}
if(m_Nmodele != 0 && m_isAvance == false && m_animrun ==true) //Si le pointeur vers le mesh est ok , si l'on ne bouge plus et si l'on n'a pas encore mis à jour l'animation ...
{
m_Nmodele->setMD2Animation(EMAT_RUN);//on passe à l'animation "rester en place"
m_animrun=false;//et on declare que l'animation courir ne se deroule plus , du coup
}



}

Merci pour vôtre aide


Hors ligne


#2 

26-01-2010 19:18:56

jonath313
Membres
Date d'inscription:
Messages: 240
IP: 195.221.123.215
Courriel

C'est bon laissez faire je me suis déchiré le cerveau et j'ai trouvé une solution bourrine certe mais elle fonctionne !

Je vous file çà dans une autre section les ptits gars !


Hors ligne


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