簡體   English   中英

SDL 2.0鍵盤處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM