当您在文本编辑器中按住某个键时,将出现该字符,然后在出现一个字符流之前会暂停一下。这是系统补偿某些人持有一个键比其他人更长/停留在思想等等。
我的问题是,当我在SlimDX Direct3D11应用程序中按住一个移动键时会发生这种情况。它不是移动相机而是移动1个单元,暂停,然后流畅地移动。
我使用以下代码捕获键盘数据:
private void InitializeKeyboard()
{
INPUT.Device.RegisterDevice(SlimDX.Multimedia.UsagePage.Generic, SlimDX.Multimedia.UsageId.Keyboard, INPUT.DeviceFlags.None);
INPUT.Device.KeyboardInput += new EventHandler<KeyboardInputEventArgs>(KeyboardInput);
}
void KeyboardInput(object sender, KeyboardInputEventArgs e)
{
if (e.Key == Keys.W) camera.MoveForward(0.3f);
if (e.Key == Keys.S) camera.MoveForward(-0.3f);
}
我使用类似的系统来捕捉鼠标,鼠标移动可以顺利地响应,因此问题必须在键盘正在进行的自动校正中以防止双击。有人知道如何阻止硬件这样做吗?或者,如果您应该在DirectX 11中以不同方式捕获输入?
答案 0 :(得分:2)
这是设计使然,你有SystemInformation.KeyboardDelay和KeyboardSpeed。延迟是等待密钥开始重复的250毫秒的数量。它通常比速度长,重复击键之间的延迟。
仅使用keydown和keyup消息。从计时器或游戏循环的自然方式重复。这也支持按下多个按键,这在当前的方法中不起作用。