Обработка клавиатуры SDL 2.0

Я пишу очень простой пример программы, которая просто показывает вам, «нажата или нет клавиша» только один раз, событие нажатия клавиши запускается всякий раз, когда я нажимаю любое количество клавиш (либо я нажимаю одну клавишу, две клавиши или более), в то время как когда кнопка отпущена, событие запускается, когда происходит событие SDL_KEYUP, в то время как количество нажатых клавиш составляет всего 1 клавишу, этот пример отлично работает на клавишах со стрелками, однако для других клавиш всякий раз, когда я нажимаю несколько клавиш и отпускаю только одну из них a » Клавиша отпущена «сообщение активировано, а затем» нажата клавиша «, я не смог найти проблему с этим.

мой код:

#include <iostream>
#include <SDL2/SDL.h>

using namespace std;
SDL_Event input;int main(int argc, const char * argv[])
{
SDL_Init(SDL_INIT_EVERYTHING);int y = 0;
int z = 0;
int w = 0;
bool key = false;

const Uint8 *state = SDL_GetKeyboardState(NULL);while (1){
w = 0;
SDL_PollEvent(&input);

//check for events generated

switch (input.type) {
case SDL_KEYDOWN:
key = true;
break;
case SDL_KEYUP:
key = false;
break;

default:
break;
}// Check for no. of keys pressed using ASCII code

for (y = 48;y<=127;y++)
if(state[y] == 1)
w++;// Display the messages

if (key && z==0 )
{
cout << "Key is Pressed" << endl;
z = 1;
}
else if (!key && w < 1 && z==1)
{
cout << "Key is released" << endl;
z = 0;

}}

return 0;
}

0

Решение

Проблема была с инициализацией цикла for, SDL 2 не использует те же перечисления ASCII для символов, поэтому мой код склонен игнорировать перечисления кода вне диапазона (48-127) после изменения кода на:

for (y = 0;y<=127;y++)
if(state[y] == 1)
w++;

проблема решена

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]