Pages: 1
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
{
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
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
Pages: 1