0

当您在文本编辑器中按住某个键时,该字符会出现,然后在出现字符流之前会出现短暂的停顿。这是补偿某些人比其他人按住键的时间更长/暂停思考等的系统。

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

4

1 回答 1

2

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

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

于 2011-02-21T21:29:37.207 回答