2017-06-27 2 views
0

Je tente de créer un jeu simple en utilisant sdl2 pour gérer les événements clavier. Mais le problème principal est que ni dans la console embarquée de Clion ni dans la console externe mon programme ne peut détecter aucun événement, seulement SDL_AUDIODEVICEADDED est pris deux fois au début du programme. Voici mon code:La détection du clavier SDL2 ne fonctionne pas

#include <iostream> 
#include "include/SDL2/SDL_keyboard.h" 
#include "include/SDL2/SDL_keycode.h" 
#include "include/SDL2/SDL_scancode.h" 

#include "include/SDL2/SDL.h" 

using namespace std; 

int main(int argc, char* argv []) { 
    SDL_Event event; 
    bool running = true; 
    SDL_Init(SDL_INIT_EVERYTHING); 
    int x, y; 
    while(running){ 

     if(SDL_PollEvent(&event)){ 
      switch(event.type){ 
       case SDL_QUIT: running = false; break; 
       case SDL_KEYDOWN: 
        switch(event.key.keysym.sym){ 
         case SDLK_q: 
          running = false; 
          break; 
        } 
        break; 

       case SDL_MOUSEBUTTONDOWN: 
        SDL_GetMouseState(&x, &y); 
        cout << "[SDL_MOUSEBUTTONDOWN] " << "x = " << x << " y = " << y << "\n"; 
        break; 
       case SDL_MOUSEMOTION: 
        x = event.motion.x; 
        y = event.motion.y; 
        cout << "[SDL_MOUSEMOTION] " << "x = " << x << " y = " << y << "\n"; 
        break; 
      } 
     } 
    } 
} 

SDL_Init renvoie 0.

+0

Je ne suis pas entièrement sûr que c'est votre problème, mais je voudrais jeter un coup d'oeil à ce didacticiel paresseux foo http://lazyfoo.net/tutorials/SDL/03_event_driven_programming/index.php. Je vois qu'il fait le sondage d'une manière légèrement différente ('while' vs' if'). Je pense qu'il y a une sorte de problème de synchronisation entre quand vous générez l'événement et quand votre code essaye de l'interroger. –

Répondre

2

Vous devez créer une fenêtre.

Les événements du clavier et de la souris dépendent d'une surface d'affichage. Seules les actions de la souris dans une fenêtre et la saisie au clavier pendant que la fenêtre est active seront capturées. Après tout, vous ne devriez pas être en mesure de recevoir des entrées éventuellement dirigées vers d'autres applications.

+0

en êtes-vous sûr? Il y a un champ d'identifiant de fenêtre mais il n'est pas garanti qu'il soit rempli. Je me souviens avoir dû faire face à des problèmes parce que je supposais que ces événements avaient un identifiant de fenêtre, mais ils ne l'ont pas fait. – xaxxon

+0

Merci, c'est vraiment utile! –