代码之家  ›  专栏  ›  技术社区  ›  Anton Gogolev

两个连续按键事件之间的长延迟

  •  3
  • Anton Gogolev  · 技术社区  · 15 年前

    我在写一个小小的游戏引擎——纯粹是为了从内部理解它们是如何工作的。我现在不想搅乱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 回复  |  直到 15 年前
        1
  •  3
  •   Nick Dandoulakis    15 年前

    使用windows消息并不是进行输入交互的最佳方式。
    我对winforms一无所知,但我假设在关键事件中使用消息。

    很多年前我就用过directinput(v7),而且速度非常快。
    也许 GetKeyboardState GetAsyncKeyState 在游戏循环中是很好的选择。