2012-02-13 76 views
2

我有以下代碼來測試2.0版SDL鍵盤輸入:垃圾鍵盤信息2.0

while (SDL_PollEvent(&evnt)) 
     { 
      if (evnt.type == SDL_KEYDOWN) 
      { 
       board = evnt.key; 
       key = board.keysym.sym; 

       switch (key) 
       { 
        case SDLK_a: 
         printf("a key!\n"); 
         break; 

        case SDLK_d: 
         printf("d key!\n"); 
         break; 

        default: 
         printf("Code: 0x%X\n", board.keysym.scancode); 
         printf("Name: %s\n", SDL_GetKeyName(key)); 
         printf("Hex: 0x%02X\n", key); 
         printf("Uni: %c\n\n", (char)board.keysym.unicode); 
       } 
      } else if (evnt.type == SDL_QUIT) 
       running = false; 
     } 

然而,以下爲輸出用於序列 'QWERTY':

Code: 0x460001 
Name: ¶ 
Hex: 0x14 
Uni: 

Code: 0x460001 
Name: → 
Hex: 0x1A 
Uni: 

Code: 0x460001 
Name: Backspace 
Hex: 0x08 
Uni: 

Code: 0x460001 
Name: § 
Hex: 0x15 
Uni: 

Code: 0x460001 
Name: ↨ 
Hex: 0x17 
Uni: 

Code: 0x460001 
Name: ∟ 
Hex: 0x1C 
Uni: 

我只是在做一些愚蠢的事情嗎?

此外,這不是我的程序的理想方法。我寧願做
如果(ispressed [「K」])
{}
等等

有沒有做這種形式的輸入處理SDL的能力,或者我需要寫我自己的班級來管理它?

+0

運行圓圈並在鍵盤上敲打我的頭足夠長的時間後,我最終檢查了代碼並自己構建了sdl。我構建的版本按預期工作。去搞清楚。 – AGuyInAPlace 2012-02-13 05:36:40

+0

你從哪裏得到你的二進制文件?我在[主SDL頁面](http://www.libsdl.org/hg.php)上看不到任何2.0二進制文件。 – genpfault 2012-02-13 14:52:07

+0

一位紳士在論壇上發佈了他在網站上的最新版本。我現在不記得這個名字。 – AGuyInAPlace 2012-02-14 22:12:02

回答

0

switch語句基本上只是一個if語句。

如果你真的想這樣做,你的方式,它看起來像

if (event.type == SDL_KEYDOWN) 
     { 
      board = evnt.key; 
      key = board.keysym.sym; 

      if(key==SDLK_a) 
      { 
       //do stuff here 
      } 

如果你想讓它看起來就像你上面說的,您需要定義的bool的MAP,叫isPressed ,並且每當你得到一個關鍵事件時,都會將它傳遞給一個幫助器,該幫助器會根據按鍵來設置地圖中的值。我現在就告訴你 - 習慣SDL'希望'你這樣做的方式。當你對它更舒適時,你會意識到它更有意義。至於你遇到的錯誤 - 我不太確定它的一部分,但是試着把SDL_EnableUNICODE();放到SDL_Enable中。在你的初始化。然後測試相同的輸入並回報 - 我期望至少解決你的unicode問題。