C++ SDL2.0中的垃圾键盘信息
我有以下代码来测试2.0版上的SDL键盘输入:C++ SDL2.0中的垃圾键盘信息,c++,input,keyboard,sdl,C++,Input,Keyboard,Sdl,我有以下代码来测试2.0版上的SDL键盘输入: while (SDL_PollEvent(&evnt)) { if (evnt.type == SDL_KEYDOWN) { board = evnt.key; key = board.keysym.sym; switch (key) {
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:
我只是在做些傻事吗
而且,对于我的程序来说,这不是一个理想的方法。我宁愿这样做
如果按['k']
{ }
等等
是否有能力在SDL中执行这种形式的输入处理,或者我需要编写自己的类来管理它?switch语句基本上只是一个if语句 如果你真的想按自己的方式去做,看起来
if (event.type == SDL_KEYDOWN)
{
board = evnt.key;
key = board.keysym.sym;
if(key==SDLK_a)
{
//do stuff here
}
如果希望它看起来与上面所说的一模一样,则需要定义一个bools映射,称为isPressed,并且每当您获得一个键事件时,将其传递给一个助手,该助手将根据按下的键设置映射中的值。我现在告诉你-习惯SDL“希望”你这样做的方式。当你对它感到更舒服时,你会意识到它更有意义
至于您正在经历的bug,我不太确定其中的一部分,但是尝试将SDL_启用Unicode;在你的初始阶段。然后对相同的输入进行测试并报告-我希望这至少可以解决unicode问题。switch语句基本上只是一个if语句 如果你真的想按自己的方式去做,看起来
if (event.type == SDL_KEYDOWN)
{
board = evnt.key;
key = board.keysym.sym;
if(key==SDLK_a)
{
//do stuff here
}
如果希望它看起来与上面所说的一模一样,则需要定义一个bools映射,称为isPressed,并且每当您获得一个键事件时,将其传递给一个助手,该助手将根据按下的键设置映射中的值。我现在告诉你-习惯SDL“希望”你这样做的方式。当你对它感到更舒服时,你会意识到它更有意义
至于您正在经历的bug,我不太确定其中的一部分,但是尝试将SDL_启用Unicode;在你的初始阶段。然后在相同的输入上进行测试并报告-我希望这至少能解决您的unicode问题。在运行圆圈并在键盘上敲击头部足够长的时间后,我最终检查了代码并自己构建了sdl。我构建的版本按预期工作。想想看,你的二进制文件是从哪里来的?我没有在上看到任何2.0二进制文件。一位绅士在论坛上发布了他在其网站上的最新版本。我现在记不起它的名字了。在绕圈子和用键盘敲击脑袋足够长的时间后,我最终检查了代码并自己构建了sdl。我构建的版本按预期工作。想想看,你的二进制文件是从哪里来的?我没有在上看到任何2.0二进制文件。一位绅士在论坛上发布了他在其网站上的最新版本。我现在记不起这个名字了。