08-03-2017 19:59:11
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 90.4.159.193
- Courriel
Bonjour,
Juste une petite question, comment fait-on pour capter l’événement touche relâchée ?(keyboard et joystick)
Pour un appui c'est comme çà :
Code c++ :
if (event.EventType == irr::EET_KEY_INPUT_EVENT && !event.KeyInput.PressedDown)
{
...
}
Mais pour le relâchement visiblement il n'y a pas de release ?
Merci.
Hors ligne
11-03-2017 13:07:01
- johnplayer
- Membres

- Date d'inscription:
- Messages: 431
- IP: 90.109.140.197
- Courriel
Ton code test un test de relachement de touche (!event.KeyInput.PressedDown). La condition est vrai si l'event est une touche et qu'elle n'est pas pressée.
PressedDown = true si la touche est pressée et false quand elle est relachée. Tu reçois un event pour chacune des 2 actions, au moment ou l'utilisateur effectue l'action.
Dans la doc:
bool PressedDown:1
If not true, then the key was left up.
Après si tu veux une action continue, il faut mémoriser l'état dans un booléen et traité l'action en dehors du receiver car le système d'event marche sur front montant et descendant des touches.
Code c++ :
// si l'événement et une touche du clavier
if (event.EventType == irr::EET_KEY_INPUT_EVENT)
{
// sélection touche
switch(event.KeyInput.Key)
{
case KEY_KEY_A:
{
// si la touche est appuyée
if(event.KeyInput.PressedDown)
{
}
// si la touche est relachée
else
{
}
} break;
}
}
core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."
Hors ligne
17-03-2017 19:13:29
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 86.216.225.222
- Courriel
Ok ça marche. Merci beaucoup
Hors ligne
19-03-2017 18:02:45
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 90.52.16.13
- Courriel
Juste une question, est-t il possible d'imiter le comportement du clavier pour l'ensemble des touches de la manette ?
Exemple :
Pour les joystick j'aimerais faire comme si c'était des boutons :
Code c++ :
if( event.JoystickEvent.Axis[1] < -5000)
{
// = Pressed down
}
else
{
// Sinon on capte le relachement
}
Et récupérer l'événnement comme un appui ou un relachement sur KEY_KEY_A ( çà serait quelque chose du genre KEY_JOY_LEFT_FORWARD).
On peut faire cela ? çà permettrait que je porte facilement mon code testé sur clavier sur une utilisation joystick.
Merci.
Hors ligne
19-03-2017 18:19:08
- Magun
- Administrateurs

- Date d'inscription:
- Messages: 910
- IP: 109.190.12.31
- Courriel Site web
quelque chose comme ça ?
Code c++ :
class blablabla
{
public:
blablabla() :
joystic_left_forward_down(true)
joystic_left_forward_up(false)
{
}
virtual bool blablabla::OnEvent(const SEvent& event)
{
if(event.EventType == irr::EET_KEY_INPUT_EVENT)
{
if(event.KeyInput.Key == irr::KEY_KEY_A)
{
player->forward(event.KeyInput.PressedDown);
}
}
if(event.EventType == irr::EET_JOYSTICK_INPUT_EVENT)
{
if(event.JoystickEvent.Axis[1] < -5000)
{
// single emit
if(joystic_left_forward_down)
{
irr::SEvent event;
event.EventType = EET_KEY_INPUT_EVENT;
event.KeyInput.Key = irr::KEY_KEY_A;
event.KeyInput.PressedDown = true;
device->postEventFromUser(event);
joystic_left_forward_up = true;
joystic_left_forward_down = false;
}
}
else
{
// single emit
if(joystic_left_forward_up)
{
irr::SEvent event;
event.EventType = EET_KEY_INPUT_EVENT;
event.KeyInput.Key = irr::KEY_KEY_A;
event.KeyInput.PressedDown = false;
device->postEventFromUser(event);
joystic_left_forward_up = false;
joystic_left_forward_down = true;
}
}
}
}
private:
bool joystic_left_forward_up;
bool joystic_left_forward_down;
};Hors ligne
19-03-2017 22:09:30
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 90.52.16.13
- Courriel
Alors çà c'est super ! merci ![]()
Hors ligne



