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

иSDL и GL сообщают только один ключ (повтор) за один опрос, даже если несколько ключей, нажатые одновременно

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

} 

Например я нажимаю W и S в то же время, как библиотеки сообщают, что были нажаты W и S.

Но если я продолжу удерживать W и S, будет сообщено только один ключ, как будто другой не удерживается вообще.

Кроме того, если я держу вниз W и S и только S сообщен и я нажимаю другую клавишу, например Q обе библиотеки не будут сообщать о том, что какой-либо ключ в настоящее время удерживается на всех.

Кажется, что keystate repeated для обеих библиотек практически бесполезен.

Является ли это стандартным поведением или может случиться так, что это происходит только в моей системе?

ответ

2

Вы можете использовать SDL_GetKeyboardState при обработке событий SDL_KEYUP и SDL_KEYDOWN, чтобы проверить состояние более чем одного ключа за раз. Состояние клавиатуры содержит текущее состояние всех клавиш. Вызов SDL_GetModState должен использоваться для клавиш модификатора, таких как Ctrl или Shift.

Быстрый пример:

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

Запуск этого в ответ на SDL_KEYUP и SDL_KEYDOWN событий я получаю несколько слов распечатаны при нажатой клавише более, что 1 стрелка в то время. например:

left 
right left 
left up down 

 Смежные вопросы

  • Нет связанных вопросов^_^