2012-02-13 51 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问题。