gpt4 book ai didi

c++ - SDL 2.0 中的垃圾键盘信息

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:00:13 25 4
gpt4 key购买 nike

我有以下代码来测试 2.0 版的 SDL 键盘输入:

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
}

如果你想让它看起来和你上面说的完全一样,你需要定义一个 bool 的 MAP,叫做 isPressed,每当你得到一个键事件,把它传递给一个 helper,它会在 map 中设置值基于按下的键。我现在告诉您 - 习惯 SDL“希望”您执行此操作的方式。当您对它感到更自在时,您会发现它更有意义。

至于您遇到的错误 - 我不太确定其中的一部分,但请尝试将 SDL_EnableUNICODE();在你的初始化中。然后测试相同的输入并返返回告 - 我希望这至少可以解决您的 unicode 问题。

关于c++ - SDL 2.0 中的垃圾键盘信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9255060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com