【问题标题】:Stop SlimDX Raw Input Keyboard "juddering"停止 SlimDX 原始输入键盘“颤抖”
【发布时间】:2011-02-22 05:29:37
【问题描述】:

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

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

【问题讨论】:

    标签: c# keyboard directx slimdx raw-input


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2022-11-25
      • 2016-06-15
      • 1970-01-01
      • 2014-05-28
      • 2011-06-11
      • 2015-01-28
      • 1970-01-01
      • 2021-08-13
      相关资源
      最近更新 更多