Historique des modifications - Message

Message #8865

Sujet: appuis / relachement d'un bouton de la souris


Type Date Auteur Contenu
Dernière modification 30-09-2010 15:12:17 magikus59
merci pour ta réponse TUpac, j'ai compris ce que tu voulais faire

par contre ça ne marche pas vraiment, mais je me suis peut être planté quelque part, voici un bout de code:
(j'ai laissé le déplacement gauche au clavier pour exemple car ceci fonctionne très bien)

CEventReceiver.cpp
position2d<s32> cursor;

bool CEventReceiver::OnEvent(const irr::SEvent &event)
{
	

	///////////////////// ROTATION JOUEUR ///////////////////

	
if (event.EventType == EET_MOUSE_INPUT_EVENT)
{
    if(event.MouseInput.Event== EMIE_RMOUSE_PRESSED_DOWN)
    {

       	cursor.X = event.MouseInput.X; 
        rotation = true;
    }
    else
    rotation = false;
    return true;           


//*******************GAUCHE (CLAVIER)**********************
    if(m_Nmodele != 0	
			
   && event.EventType == irr::EET_KEY_INPUT_EVENT

    && event.KeyInput.Key == irr::KEY_KEY_Q)	
    {
        
        if(event.KeyInput.PressedDown == true)
            gauche = true;


        else
            gauche = false;
      
        return true;
    }
}

.............................

void CEventReceiver::majPosMesh()// fonction de MAJ de la position du node
{

                f32 vitesse_deplacement = 1.f;
		f32 vitesse_rotation = 1.2f;


if(m_Nmodele != 0 && rotation == true)
    {
	
		position2d<f32> LastPos;
		 

		irr::core::vector3df rotation = m_Nmodele->getRotation(); 

		f32 Movement = (LastPos.X - cursor.X) /sensibilite_souris;
		rotation.Y += Movement; 

		 
            m_Nmodele->setRotation(rotation);
		
       LastPos.X = cursor.X;


if(m_Nmodele != 0 && gauche == true)
    {
       
        irr::core::vector3df r = m_Nmodele->getRotation();	
		 r.Y -= vitesse_rotation;	
        m_Nmodele->setRotation(r);	

    }
.............................................
		
	
	}

et biensur j'ai mis dans ma boucle de rendu:
receiver.majPosMesh();

j'obtiens pas vraiment ce que je veux (mais y'a du mieux on va dire ^^)
en fait, plus de vais loin dans en X de mon curseur, plus mon node tourne vite
par exemple: si je me met mon curseur à 10 en X (quasiment tout à gauche de l'écran donc) et que je fait un clique droit, mon node va tourner lentement
ensuite si je déplace mon curseur à 20 en X, la rotation s'arrête mais si je re-clique, mon node va tourner de nouveau mais plus vite (et je ne vous raconte pas lorsque je met le curseur tout à droit de l'écran...c'est un coup à choper des convulsions :p)
le node ne tourne que dans un sens, mais ça c'est dû au fait que le X0 du curseur ne commence par au milieu de l'écran, il faudra que je créé un position2d<s32> avec le centre de l'écran comme référence (en faisant hauteur_écran / 2 et largeur_écran / 2 par exemple)
Création du message 30-09-2010 15:04:10 magikus59
merci pour ta réponse TUpac, j'ai compris ce que tu voulais faire

par contre ça ne marche pas vraiment, mais je me suis peut être planté quelque part, voici un bout de code:
(j'ai laissé le déplacement gauche au clavier pour exemple car ceci fonctionne très bien)

CEventReceiver.cpp
position2d<s32> cursor;

bool CEventReceiver::OnEvent(const irr::SEvent &event)
{
	

	///////////////////// ROTATION JOUEUR ///////////////////

	
if (event.EventType == EET_MOUSE_INPUT_EVENT)
{
    if(event.MouseInput.Event== EMIE_RMOUSE_PRESSED_DOWN)
    {

       	cursor.X = event.MouseInput.X; 
        rotation = true;
    }
    else
    rotation = false;
    return true;           


//*******************GAUCHE (CLAVIER)**********************
    if(m_Nmodele != 0	
			
   && event.EventType == irr::EET_KEY_INPUT_EVENT

    && event.KeyInput.Key == irr::KEY_KEY_Q)	
    {
        
        if(event.KeyInput.PressedDown == true)
            gauche = true;


        else
            gauche = false;
      
        return true;
    }
}

.............................

void CEventReceiver::majPosMesh()// fonction de MAJ de la position du node
{

                f32 vitesse_deplacement = 1.f;
		f32 vitesse_rotation = 1.2f;


if(m_Nmodele != 0 && rotation == true)
    {
	
		position2d<f32> LastPos;
		 

		irr::core::vector3df rotation = m_Nmodele->getRotation(); 

		f32 Movement = (LastPos.X - cursor.X) /sensibilite_souris;
		rotation.Y += Movement; 

		 
            m_Nmodele->setRotation(rotation);
		
       LastPos.X = cursor.X;


if(m_Nmodele != 0 && gauche == true)
    {
       
        irr::core::vector3df r = m_Nmodele->getRotation();	
		 r.Y -= vitesse_rotation;	
        m_Nmodele->setRotation(r);	

    }
.............................................
		
	
	}

et biensur j'ai mis dans ma boucle de rendu:
receiver.majPosMesh();

j'obtiens pas vraiment ce que je veux (mais y'a du mieux on va dire ^^)
en fait, plus de vais loin dans en X de mon curseur, plus mon node tourne vite
par exemple: si je me met mon curseur à 10 en X (quasiment tout à gauche de l'écran donc) et que je fait un clique droit, mon node va tourner lentement
ensuite si je déplace mon curseur à 20 en X, la rotation s'arrête mais si je re-clique, mon node va tourner de nouveau mais plus vite (et je ne vous raconte pas lorsque je met le curseur tout à droit de l'écran...c'est un coup à choper des convulsions :p)
le node ne tourne que dans un sens, mais ça c'est dû au fait que le X0 du curseur ne commence par au milieu de l'écran, il faudra que je créé un position2d<s32> avec le centre de l'écran comme référence (en faisant hauteur_écran / 2 et largeur_écran / 2 par exemple)

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