SDL_GetKeyboardState()为所有键返回错误的扫描码

时间:2014-05-08 18:02:49

标签: c# mono sdl-2

我正在尝试使用SDL2-CS绑定并遇到SDL_GetKeyboardState()的问题。也许我对访问返回数组的方式做错了,但看起来里面的数据是错误的。

这是我做过的测试:

SDL.SDL_PumpEvents();
states = SDL.SDL_GetKeyboardState( out arraySize );

unsafe 
{
    uint* s = (uint*)states;
    for (int i=0; i<arraySize; ++i)
    {
        if (s[i] > 0 && i < 100)
        {
            Debugger.Break();
        }
    }
}

当我按'Q'时,它停在i = 5(它应该是20)。使用'W'时它停在6而不是26,'Return'停在10而不是40.我还没有看到一个停在正确值的键。我用.NET / mono和windows / mac得到同样的东西。有人使用csharp绑定成功使用了这个函数吗?

1 个答案:

答案 0 :(得分:1)

SDL_GetKeyboardState会返回Uint8的数组,而不是uint!当您浏览数组时,每个步骤都会看到sizeof(uint)字节并检查unsigned int值是否为0.在i=5,您正在检查4个扫描码,其中一个是SDLK_SCANCODE_Q

检查文档:https://wiki.libsdl.org/SDL_GetKeyboardState

我希望你的编译器警告你这种类型不匹配。