#0 

08-03-2017 20:59:11

jonath313
Abonné
Date d'inscription: 28-12-2009
Messages: 240

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


#1 

11-03-2017 14:07:01

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

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;
    }   
}

Dernière modification par johnplayer (11-03-2017 14:08:23)


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


#2 

17-03-2017 20:13:29

jonath313
Abonné
Date d'inscription: 28-12-2009
Messages: 240

Ok ça marche. Merci beaucoup

Hors ligne


#3 

19-03-2017 19:02:45

jonath313
Abonné
Date d'inscription: 28-12-2009
Messages: 240

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.

Dernière modification par jonath313 (19-03-2017 19:03:03)

Hors ligne


#4 

19-03-2017 19:19:08

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 910
Corrections: 2
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


#5 

19-03-2017 23:09:30

jonath313
Abonné
Date d'inscription: 28-12-2009
Messages: 240

Alors çà c'est super ! merci wink

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
94 invités en ligne
Aucun membre connecté
RSS Feed