Answers:
通常建议使用游戏循环,因为它很简单。几乎所有游戏都可以通过循环来正确开发和运行,并且大多数游戏都需要一个才能正常运行。
例如,大多数物理引擎需要可靠的不断更新以进行正确的仿真。动画,其他动态内容和图形需要进行每次更改等更新。通过使用循环,您几乎可以自由地进行操作。
现在请注意,您的循环不必在单独的线程上运行。实际上,为简单起见,大多数游戏都会在主线程上运行循环。甚至我的Android项目都遵循这一原则。
现在,这里真正的问题是您提出什么替代方案?如果您对如何可靠地获取输入还有其他想法,请进行更新并画出适合您的框架,然后继续!否则,游戏循环可能是最简单的前进方式。
不,不需要单独的线程。如果您没有做任何过于激烈的事情(在您向我们展示的游戏中情况并非如此),那么所有事情都可以在主线程上完成。
如果您正在执行大量处理或以其他方式遇到UI /输入无响应的问题,则需要第二个线程。例如,在更复杂的游戏中,您不希望在AI计算下一步动作时UI /输入不响应。由于您的游戏似乎主要是在响应用户输入和更新视觉效果,因此不需要第二个线程。
回答“是否需要循环”原始问题。
否,但是替代方案更复杂,更难实现且很少使用。
根据定义,游戏是交互式的。至少,它在等待输入并更新输出。最简单的方法是使用循环。不需要为此生成新线程。
即使您提到的游戏看起来很简单,但它具有互动的视觉效果和声音,并且会根据用户输入不断对其进行更新。
游戏循环也没有很多其他选择。基于中断的某种系统是可能的。但是,这样的系统增加了复杂性并减少了诸如确定性之类的其他因素。游戏循环如此普遍是有原因的,它们易于实现,易于理解,具有灵活性并且做得很好。
回答实际问题(游戏循环是否需要在单独的线程中进行):
人们经常建议使用单独的线程的原因是,他们不希望繁重的处理过程干扰UI交互性。您是唯一可以判断您的游戏是否需要单独线程的人。当前设计中的主要游戏循环是否会干扰UI的响应时间,这完全取决于引擎和框架。以为您通常会认为(在小型项目中)不会,除非您有其他想法。
将代码保留在单独线程中的另一个原因是使代码保持模块化和简单。从长远来看,将两个不相关的代码片段混合在一起通常会导致代码变得不那么可读和难以维护。
游戏循环是否需要在其自己的单独线程上运行?可能吧 如果响应时间或代码存在问题,并且无论繁重的处理工作都需要多个UI项来响应,或者您只是希望将代码分解为由于设计原因而同时发生的特定任务,然后再进行处理。但是,它被认为是高级编程实践。
一个简单但也许不是很好的例子来说明一个两人游戏。您可能需要运行一个类的两个实例,这些实例处理用户输入并转换为玩家角色实例中的状态更改。
某些框架鼓励/要求您使用像ActionScript3.0这样的基于事件/中断的系统。在这种情况下,循环代码通常会转至该OnEnterFrame
事件或每秒发生20-60或120次的类似事件。
原始问题的答案(我需要一个主循环):
一切都归结为程序计数器。如果您要制作的游戏将运行超过预定的时间并且不会生成代码,那么您将需要请用户的PC重复一些已经处理过的指令,以及可能会改变的指令。同时是状态(存储在游戏对象和全局变量中的值)。
由于您知道需要重复说明,因此有多种方法可以完成此任务并不断处理相同的说明。所有这些方法都涉及将程序计数器移回当前相关的指令。导致代码重复的最常见的控制流语句称为循环,另一种是goto
在现代代码中很少使用的语句,在这种情况下具有类似的效果(与您完全无关)。
因此,要回答上一个问题,是否需要循环?是的你是。