我正在编写一个小游戏引擎——纯粹是为了从内部了解它们是如何工作的。我目前不想搞乱 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 (或者当今任何流行的方式?)路线?
使用 Windows 消息并不是进行输入交互的最佳方式。
我对 WinForms 一无所知,但我假设关键事件使用消息。
我很多年前就使用过 DirectInput (v7),它的速度非常快。
也许获取键盘状态 http://msdn.microsoft.com/en-us/library/ms646299%28VS.85%29.aspx or 获取异步键状态 http://msdn.microsoft.com/en-us/library/ms646293%28VS.85%29.aspx在游戏循环中是很好的选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)