停止SlimDX原始输入键盘“抖动”

时间:2011-02-21 21:23:13

标签: c# keyboard directx slimdx raw-input

当您在文本编辑器中按住某个键时,将出现该字符,然后在出现一个字符流之前会暂停一下。这是系统补偿某些人持有一个键比其他人更长/停留在思想等等。

我的问题是,当我在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中以不同方式捕获输入?

1 个答案:

答案 0 :(得分:2)

这是设计使然,你有SystemInformation.KeyboardDelay和KeyboardSpeed。延迟是等待密钥开始重复的250毫秒的数量。它通常比速度长,重复击键之间的延迟。

仅使用keydown和keyup消息。从计时器或游戏循环的自然方式重复。这也支持按下多个按键,这在当前的方法中不起作用。