我在写一个小游戏引擎——纯粹是为了了解这些引擎是如何从内部工作的。我目前不想弄乱 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(或者现在的犹太洁食方式?)路线?