两个连续的KeyDown事件之间的延迟延迟

时间:2010-02-26 07:49:56

标签: winforms keyboard-events game-engine

我正在编写一个小游戏引擎 - 纯粹是为了理解这些内部工作原理。我目前不想搞乱OpenGL或DirectX,所以我坚持使用GDI +和所有WinForms的东西来绘制控件。

显然,我需要处理输入。更具体地说,键盘事件。然而,这会带来一个问题:

protected override void OnKeyDown(KeyEventArgs e)
{
    Trace.WriteLine(string.Format("KD {0:hh:MM:ss.fff} {1}", 
        DateTime.Now, e.KeyCode));
}

此代码(即使在控制面板的键盘小程序中设置了最短的重复延迟)也会产生以下结果:

KD 10:02:18.318 Right
KD 10:02:18.570 Right
KD 10:02:18.598 Right
KD 10:02:18.639 Right
KD 10:02:18.667 Right
KD 10:02:18.701 Right

如你所见,这是0.25秒。前两个事件之间的延迟。这导致屏幕上物体的移动缓慢,显然:它首先向右略微移动,然后暂停一段时间,然后继续。

如何解决该问题?这可以在纯WinForms中完成,还是应该去DirectInput(或者现在的犹太方式?)路由?

1 个答案:

答案 0 :(得分:3)

使用Windows消息不是进行输入交互的最佳方式 我对WinForms一无所知,但我认为在关键事件中使用消息。

多年前我使用过DirectInput(v7),速度非常快 游戏循环中的GetKeyboardStateGetAsyncKeyState可能是不错的选择。