[英]SDL 2.0 Keyboard Handling
我正在編寫一個非常簡單的示例程序,該程序僅向您顯示一次“是否按下某個鍵”,每當我按下任意數量的鍵(無論我按下一個鍵,兩個鍵還是更多鍵)時,都會觸發一次按鍵事件。當按下一個鍵的數量僅為1個鍵時發生SDL_KEYUP事件時,將觸發“鍵釋放”事件,此示例在箭頭鍵上非常有效,但是對於其他鍵,只要我按下多個鍵並僅釋放其中一個,“觸發了“鍵已釋放”消息,然后觸發“按下了一個鍵”,我無法找到問題所在。
我的代碼:
#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++;
問題已經解決了
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.