我正在尝试使用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绑定成功使用了这个函数吗?
答案 0 :(得分:1)
SDL_GetKeyboardState
会返回Uint8
的数组,而不是uint
!当您浏览数组时,每个步骤都会看到sizeof(uint)
字节并检查unsigned int
值是否为0.在i=5
,您正在检查4个扫描码,其中一个是SDLK_SCANCODE_Q
。
检查文档:https://wiki.libsdl.org/SDL_GetKeyboardState。
我希望你的编译器警告你这种类型不匹配。