好的,似乎这个问题在SDL论坛和这里多年来不断涌现,但我还没有看到一个好的解决方案。也许有一种解决方法,或者我错过了一些东西..
我正在努力做饭#34;从SDL_KEYDOWN事件接收的修饰符+键代码,组合在当前OS键映射中表示的内容。
在SDL1中,这在keysym.unicode字段中可用,但在SDL2中已经消失了。
相反,您应该为此听取SDL_TEXTINPUT事件,这确实有效,但问题是它们在相应的SDL_KEYDOWN事件之后,所以如果您有例如热键你使用并想要做出反应,这可能需要成为复合键的一部分,你就会遇到麻烦。
更具体地说,我试图对' /'做出反应。按,在当前键映射中,打开游戏中的管理命令框。但是在我的键盘映射上,使用Shift + 7达到/,我已经使用7作为其他东西的热键,并且不想在Shift + 7情况下触发其他内容(但我可以& #39;从游戏中知道它是特定的Shift + 7代表' /'!)
在SDL2中,我按此顺序获取这些事件:
我要问的一个解决方法是,是否有办法去做饭#34; " L_SHIFT +' 7'"组合成' /'我自己,这样我就可以在等待SDL_TEXTINPUT事件之前立即在SDL_KEYDOWN上查看7。
另一方面,在SDL1中,我会得到:
工作正常(并且还适用于在专用密钥上具有' /'的键盘映射)。