它应该是直接来自设备的RAW输入,这很奇怪它受这些设置的影响:
在延迟之后,它不会收到WM_INPUT消息。重复率也影响它。我还试过用NO_LEGACY标志注册原始输入设备,没有区别。这是使用DirectX11应用程序我遇到此问题。
case WM_INPUT: {Input::handleInput(uMsg, wParam, lParam); break; }
答案 0 :(得分:1)
显然没有办法解决这个问题,gamedev教程解释说你只需要在你的代码中使用自己的复杂解决方法来处理它。 Raw输入我的微软。
当你按住一个键时会发生什么WM_INPUT会发送一个按键消息,等到Windows"键重复延迟"已经过了,然后继续在Windows"键重复速度"上发送关键信息。设置。
我发现代替使用Makecode或Vkey成员,它更容易使用keyboard.flags成员,因为(对于大多数键)当键按下时,此标志将为零,并且当它为&时#39;向上标志将被设置为1,因此您可以通过以下方式将其反转:
switch (mpRawInput->data.keyboard.VKey)
{
case VK_W: Input::mIsKeyDown[VK_W] = !mpRawInput->data.keyboard.Flags; break;
case VK_A: Input::mIsKeyDown[VK_A] = !mpRawInput->data.keyboard.Flags; break;
case VK_S: Input::mIsKeyDown[VK_S] = !mpRawInput->data.keyboard.Flags; break;
case VK_D: Input::mIsKeyDown[VK_D] = !mpRawInput->data.keyboard.Flags; break;
case VK_SPACE: Input::mIsKeyDown[VK_SPACE] = !mpRawInput->data.keyboard.Flags;
}
使用keyboard.flag 0或1值意味着当您按下某个键时会收到0的标记消息,因此您将相反的信息发送给" isKeyDown"布尔。当该键被抬起时,该标志将被设置为1。
对于其他键,您需要解决方法,例如,当num lock打开时,箭头键的标志值为3,关闭时为正常。其他键的行为完全不同,例如" Print Screen"和"暂停/休息"。真是一团糟。