你最讨厌现代游戏循环的什么?游戏循环是否可以改进,或者是否有更好的替代方案,例如事件驱动架构?
4 回答
看来这真的应该是CW...
我现在正在学习研究生级别的游戏引擎编程课程,他们坚持使用游戏循环方法。当然,这并不意味着它是唯一/最好的解决方案,但它肯定是合乎逻辑的。使用循环可以确保所有游戏系统都可以运行,而无需请求它们自己的定时中断或其他东西。可以集中控制:在我当前的项目中,我有一个GameManager
类,它在每一帧Update(float deltaTime)
中依次循环遍历每个注册对象的函数。我不必调试事件系统或设置定时信号,我只需使用循环来调用一系列函数。没有混乱,没有大惊小怪。
为了回答您关于我最讨厌什么的问题,循环方法在逻辑上确实有助于自由使用继承和多态性,这可能会使对象的大小/复杂性膨胀。如果你不小心,这可能是一个轻微到可怕的陷阱。如果你小心,它可能根本不是问题。
通常,事件驱动架构最适合游戏(仅在用户想要完成某事时才做某事)。但是,你仍然需要有一个线程不断地重绘世界。
要完全基于事件,您可以生成一个额外的线程,该线程除了每 x 毫秒将 CPUTick 事件放入您的事件队列之外什么都不做。
在 JavaScript 中,这通常是更自然的路线,因为您可以轻松创建一个额外的“线程”,使用 setInterval() 向您发送事件。
或者,如果您在包含游戏的框架中已经有一个循环——比如浏览器中有 JS,或者 python 有twisted——你可以告诉循环器以固定的时间间隔给你回电。例如:
function gameLoop() {
// update, draw...
}
window.setInterval(gameLoop, 1000/fps);
无论游戏中是否有任何事件,游戏都应该绘制自己并以固定速率更新它,所以我认为放弃游戏循环是不可能的。我仍然想知道是否有人能想到任何其他的游戏循环替代方案。