Historique des modifications - Message

Message #808

Sujet: Interruptions clavier et souris


Type Date Auteur Contenu
Création du message 18-12-2006 13:32:34 White Threat
Tout d'abord, bonjour a tous!

Je m'amuse en ce moment avec Irrlicht (et je dois dire qu'il est extremement facile a prendre en main) mais voila j'ai deux remarques qui m'ont fait me creuser la tete et maintenant que je connais la reponse, je pense que cela pourrait faire gagner du temps a pas mal de gens...

Remarque Interruptions Souris:
J'ai remarque que sur ma version d'irrlicht (1.2) les numeros associes aux interruptions souris etaient errones. Je vous donne donc les numeros que j'ai obtenus:
Remplacez dans Keycodes.h:
		KEY_LBUTTON          = 0x01,  // Left mouse button  
		KEY_RBUTTON          = 0x02,  // Right mouse button  
		KEY_CANCEL           = 0x03,  // Control-break processing  
		KEY_MBUTTON          = 0x04,  // Middle mouse button (three-button mouse)  
		KEY_XBUTTON1         = 0x05,  // Windows 2000/XP: X1 mouse button 
		KEY_XBUTTON2         = 0x06,  // Windows 2000/XP: X2 mouse button 
  par:
		KEY_LBUTTON_PRESSED 0x00, // Left mouse button down
		KEY_RBUTTON_PRESSED 0x01, // Right mouse button down
		KEY_MBUTTON_PRESSED 0x02, // Middle mouse button down
		KEY_LBUTTON_RELEASED 0x03, // Left mouse button up
		KEY_RBUTTON_RELEASED 0x04, // Right mouse button up
		KEY_MBUTTON_RELEASED 0x05, // Middle mouse button up
		KEY_MOUSE_MOVED 0x06,
		KEY_WHEEL_CHANGED 0x07,

Remarque Interruptions Clavier:
Les interruptions claviers arrivent chaque fois qu'on appuie ou qu'on relache une touche mais comment tester si plusieurs touches sont enfoncees simultanement?
Pour ce faire, on peut creer un mapping/masque de touche pour noter chaque touche qui est enfoncee et chaque touche qui est relachee a chaque evenement leve afin d'avoir en permanence l'ensemble des touches qui sont utilisees a chaque nouvelle interruption.

bool KeyMap[255];
bool OnEvent(irr::SEvent event) {
  if (event.EventType == irr::EET_KEY_INPUT_EVENT) {
    KeyMap[event.KeyInput.Key] = event.KeyInput.PressedDown;
    return event.KeyInput.PressedDown;
  }
  return false;
}

void OnPreRender() {
  if (KeyMap[irr::KEY_UP])
   //move up...
  if (KeyMap[irr::KEY_DOWN])
   //move down...
  if (KeyMap[irr::KEY_LEFT])
   //move left...
  if (KeyMap[irr::KEY_RIGHT])
   //move right...

}

Ainsi toutes les touches enfoncees simultanement seront a true et les autres a false. Dans mon exemple les 7 premiers elements du tableau ne seront jamais affectes (car ce sont les valeurs des evenements souris).

pour faire un peu mieux, vous pouvez regarder comment sont geres les evenements clavier dans le source code de CCameraFPSSceneNode.cpp :
OnEvent() et animate()

J'espere que ce petit exemple vous sera utile...

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