SDL_KEYDOWN无法识别某些击键(A-Z,0-9& Space)

时间:2018-02-26 18:33:35

标签: c++ visual-studio-2017 sdl-2

我正在从我的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直接发布。

0 个答案:

没有答案