1

我一直在努力为自己弄清楚,但是所有在线教程和我能找到的所有东西都不能真正解释我的问题,所以我希望这里有人可以帮助我。

到目前为止,我只使用 C#,主要使用 WPF,如果我想在键盘上按下一个键时引发一个事件,我只需使用该KeyDown事件。在那里我可以很容易地识别按下的键e.Key

现在在 XNA 中,我所看到的一切都是KeyboardState state = Keyboard.GetState();用来获取键盘状态并不断检查Update()- 方法,如果例如state.IsKeyDown(Keys.Left);返回 true 或 false。

我的问题是:这不是真的低效吗?例如,如果我的游戏使用 15 个键进行输入,我将获取键盘状态并检查这 15 个键中的每一个,并且每秒检查 30 次。有什么原因,为什么在 XNA 中使用这种方法似乎如此普遍?我能想到的唯一解释是,确保所有内容都保留在- 方法中Update,以便明确执行,以免延迟事件导致游戏出现问题。

4

1 回答 1

3

表单应用程序和视频游戏是两个完全不同的野兽。在一个好的视频游戏中,代码会使用所有可用的线程。出于这个原因,让一个事件启动一个新线程而没有可用的线程显然是一件坏事,因为它可能会挂起另一个关键线程。游戏中没有松散的线程。

表单对您的输入是有反应的。当你不做某事时,它几乎什么都不做。没有人关心按下表单中的按钮是否需要 0.2-0.5 秒的反应时间。

游戏是主动的,并不断检查它们。无论如何,它都会为 AI、物理、声音、FX、动画等每一帧更新自己,屏幕上发生的事情总是与用户所做的事情相关联。当代码更新玩家的动作时,输入应该总是被解析。所以无论如何你都必须测试它们!最重要的是,您希望对您的输入有最好的反应时间,而做到这一点的唯一方法就是不断检查它们。用户输入的 0.2 秒延迟会使游戏无法玩。有些编码员的作用仅仅是将输入延迟降至最低。

于 2012-11-03T10:42:48.997 回答