Я пишу очень простой пример программы, которая просто показывает вам, «нажата или нет клавиша» только один раз, событие нажатия клавиши запускается всякий раз, когда я нажимаю любое количество клавиш (либо я нажимаю одну клавишу, две клавиши или более), в то время как когда кнопка отпущена, событие запускается, когда происходит событие 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;
}
Проблема была с инициализацией цикла for, SDL 2 не использует те же перечисления ASCII для символов, поэтому мой код склонен игнорировать перечисления кода вне диапазона (48-127) после изменения кода на:
for (y = 0;y<=127;y++)
if(state[y] == 1)
w++;
проблема решена
Других решений пока нет …