2016-05-16 20 views
0
SDL_Event event; 
while(SDL_PollEvent(&event)){ 
    if(event.type == SDL_KEYDOWN || event.type == SDL_KEYUP){ 
     //... 
    } 
} 

と私は同時にWSを押し例えばSDLとGLFWは複数のキーを同時に押したままにしている場合でも、ポーリングごとに1つのキー(リピート)を報告

void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) 
{ 

} 

、両方図書館はWSが押されたと報告しています。

しかし、私が引き続きWSを保持している場合、他のキーが全く押されていないかのように1つのキーだけが報告されます。

はまた、私はWSを押した場合のみSが報告され、私は両方のライブラリは、いずれかのキーが現在全く押されていることを報告しませんたとえばQのための別のキーを押してください。

両方のライブラリのキーステートrepeatedはほとんど役に立たないようです。

この標準的な動作ですか、それとも私のシステムで発生する可能性がありますか?

答えて

2

SDL_KEYUPおよびSDL_KEYDOWNイベントを処理するときに、一度に複数のキーの状態を確認する場合は、SDL_GetKeyboardStateを使用できます。キーボードの状態は、すべてのキーの現在の状態を保持します。 SDL_GetModStateコールは、CtrlキーやShiftキーのような修飾キーに使用する必要があります。

クイック例:私は、一度に多くのこと1つの矢印キーを押したときに、複数の単語が印刷され得るSDL_KEYUPSDL_KEYDOWNイベントに応じてこれを実行

static void keyboard_handler() 
{ 
    int n, count = 0; 
    char buf[80]; 
    const uint8_t *state = SDL_GetKeyboardState(&count); 
    buf[0] = 0; 
    if (state[SDL_SCANCODE_RIGHT]) strcat(buf, "right "); 
    if (state[SDL_SCANCODE_LEFT]) strcat(buf, "left "); 
    if (state[SDL_SCANCODE_UP]) strcat(buf, "up "); 
    if (state[SDL_SCANCODE_DOWN]) strcat(buf, "down "); 
    if (buf[0] != 0) 
     printf("%s\n", buf); 
} 

。例:

left 
right left 
left up down 
関連する問題