我正在从我的Linux / Codeblocks设置到我的Win7 / VisStudio设置重写一些SDL实践,我遇到了一个奇怪的障碍。 SDL识别一些击键但不识别其他击键。它会读取箭头键,shift,alt,ctrl和其他一些键,但它不能识别大多数键,a-z 0-9,Space等等。
既不:
SDL_GetScancodeName(event->key.keysym.scancode)
也不
SDL_GetKeyName(event->key.keysym.sym)
使用printf
打印有问题的键的任何响应,但对工作键的响应很好。
我仔细检查了我的键盘设置为英文,我也尝试使用USB键盘,而不是我常用的PS2主板,以防因某些原因导致干扰但没有结果。
我试图找到类似的问题,但我似乎找不到任何具有这种特定按键问题的问题。
Visual Studio 2017. SDL2,使用libsdl.org的Dev libs。 x86如果重要的话。
修改 我治疗了症状,但没有发烧。如果有人可以提供帮助,我希望能够更好地了解出了什么问题以及一些更好的解决方案。
我试图检测何时没有按键,我的原始代码是:
if (e.type == SDL_KEYDOWN)
用:
else
表示没有按键的情况。除问题键外,这个工作正常。
我很好奇为什么这只会影响某些键,并且可能是在没有键被按下时检测的替代方法。
以下是我正在使用的代码的摘录:
while (SDL_PollEvent(&e) != 0)
{
if (e.type == SDL_KEYDOWN)
{
switch (e.key.keysym.sym)
{
case SDLK_UP:
keyPressed = "Up";
printf("Keypress test: Up\n");
break;
case SDLK_SPACE:
keyPressed = "Space";
printf("Keypress test: Space\n");
break;
default:
break;
}
}
else
{
keyPressed = "None";
}
}
使用else
我可以正确返回keyPressed
但不是SDLK_UP
的字符串SDLK_SPACE
。在这种情况下,交换机中的printf
都会出现,所以我肯定会进入它,但else
似乎覆盖了字符串。删除else
使两者都完美无缺,但是当没有按下任何键时我无法检测到。
我假设有一些关于SDLK_SPACE
A-Z和0-9的内容,我不明白会导致程序进入else
。
我很快就发了一个git来发布代码: https://github.com/TorsvikVonClemson/AloeFoil00
它应该显示5个形状和一个测试矩形。一个没有按键,按下空格时按下每个箭头键和矩形。
道歉,如果它草率,我还没有想到如何从VS17直接发布。