<p>这里有一些值得思考的东西</p>
<p>小免责声明,
我不是一个游戏开发者,也不是一个经验丰富的开发者</p>
<p>在一个更大的游戏中,你可能想要很好地掌握在哪里发生的事情。现在假设我们有一个充满实体的游戏(把实体想象成你在屏幕上看到的对游戏有某种影响的东西)。我们想在游戏循环的每一帧更新所有这些实体</p>
<p>实体可能会被渲染、移动、碰撞检查、受玩家输入的影响、动画或游戏需要的任何功能。
假设我们有一个实体列表,那么这样做的顺序对我们的游戏很重要</p>
<pre class="lang-py prettyprint-override"><code>entities = []
</code></pre>
<p>然后我们可以做类似的事情,在游戏中循环每个敌人,执行他们的行为功能。我们将所有实体传递到check_collision函数中,以使代码更易于理解</p>
<p>版本1</p>
<pre class="lang-py prettyprint-override"><code>entities = []
def game_loop:
while(true):
for entity in entities:
entity.gather_input()
entity.move()
entity.check_collision(entities)
entity.animate()
entity.render()
</code></pre>
<p>现在看一下这个:</p>
<p>版本2</p>
<pre class="lang-py prettyprint-override"><code>entities = []
def game_loop:
while(true):
for entity in entities:
entity.gather_input()
for entity in entities:
entity.move()
for entity in entities:
entity.check_collision(entities)
for entity in entities:
entity.animate()
for entity in entities:
entity.render()
</code></pre>
<p>我们执行实体的顺序及其行为发生了变化。我们现在有了分组行为,可以说我们已经定义了gameloop的更新方式。我们现在知道,在检查实体的所有碰撞之前,实体的所有移动都已更新</p>
<p>而在版本1中,我们首先对1个实体执行所有逻辑,然后再执行下一个。使用版本1时,我们可能会在单个帧中丢失相关数据,因为1个实体可能会移动并检查碰撞,它实际上应该等到所有实体都移动了</p>
<p>希望这能激发更多关于兔子洞(即游戏设计/架构)的研究</p>