2017-06-27 6 views
0

キーボードイベントを処理するためにsdl2を使用して簡単なゲームを作成しようとしています。しかし、主な問題は、Clionの組み込みコンソールでも、外部のプログラムでも私のプログラムでは何のイベントも検出できないということです。プログラム開始時にSDL_AUDIODEVICEADDEDが2回しか捕捉されません。ここに私のコードは次のとおりです。あなたは、ウィンドウを作成する必要がSDL2キーボードの検出が機能しません

#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 0を返します。

+0

私はあなたの問題だとは思っていませんが、このlazy fooのチュートリアルhttp://lazyfoo.net/tutorials/SDL/03_event_driven_programming/index.phpを見ていきたいと思います。私は彼がポーリングをやや異なったやり方で行っているのを見ています( 'while'と' if'')。私はあなたがイベントを生成するときとコードがそれをポーリングしようとするときの間にある種のタイミング問題があると思うでしょう。 –

答えて

2

キーボードとマウスイベントは、表示面によって異なります。ウインドウがフォーカス中にウインドウ内のマウス操作とキーボード入力のみがキャプチャされます。結局のところ、あなたは他のアプリケーションに向けられた可能性のある入力を受け取るべきではありません。

+0

本当ですか?ウィンドウIDフィールドはありますが、データが格納されることは保証されていません。私はこれらのイベントにウィンドウIDがあると仮定していたので問題に対処しなければならないことを覚えていますが、そうではありませんでした。 – xaxxon

+0

ありがとう、本当に便利です! –

関連する問題