#1 

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


#2 

11-03-2017 13:07:01

johnplayer
Membres
Avatar de johnplayer
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


#3 

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


#4 

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


#5 

19-03-2017 18:19:08

Magun
Administrateurs
Avatar de Magun
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


#6 

19-03-2017 22:09:30

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

Alors çà c'est super ! merci wink


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