C# 停止SlimDX原始输入键盘“;“颤抖”;

C# 停止SlimDX原始输入键盘“;“颤抖”;,c#,keyboard,directx,slimdx,raw-input,C#,Keyboard,Directx,Slimdx,Raw Input,当您在文本编辑器中按住一个键时,字符将出现,然后在出现字符流之前,您会得到短暂的暂停。这是一个系统,用于补偿某些人按住钥匙的时间比其他人长/思维停顿等 我的问题是,当我在SlimDX Direct3D11应用程序中按住移动键时,会发生这种情况。它不移动相机,而是移动1个单元,暂停,然后流畅地移动 我使用以下代码捕获键盘数据: private void InitializeKeyboard() { INPUT.Device.RegisterDevice(SlimDX.Multimedia.

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

我的问题是,当我在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);
}
private void InitializeKeyboard()
{
INPUT.Device.RegisterDevice(SlimDX.Multimedia.UsagePage.Generic,SlimDX.Multimedia.UsageId.Keyboard,INPUT.DeviceFlags.None);
INPUT.Device.KeyboardInput+=新事件处理程序(KeyboardInput);
}
无效键盘输入(对象发送器、键盘输入事件参数e)
{
如果(e.Key==Keys.W)摄像机向前移动(0.3f);
如果(e.Key==Keys.S)摄像机向前移动(-0.3f);
}

我使用了一个类似的系统来捕捉鼠标,鼠标运动平稳,反应灵敏,所以问题一定是键盘为了防止双击而进行的自动修正。有人知道如何阻止硬件这么做吗?或者,如果您在DirectX 11中应该以不同的方式捕获输入?

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

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