如何创建2D游戏引擎,其中许多对象每个都以随机的时间间隔周期性地移动?

时间:2013-12-24 18:04:50

标签: design-patterns

我在SDE采访中被问到一个游戏设计问题。采访者希望我设计一个简单的2D游戏,其中有很多蠕虫在2d网格中移动。每只蠕虫占据4个细胞,并有一个头部。它在三个方向中的一个方向上移动到下一个小区,并且在随机时间间隔中,例如50毫秒。 问题是如何更新网格,许多蠕虫以不同的速度移动?我给出了一个答案,每个蠕虫都是一个线程,在预定义的时间后自行移动。显然,这可能是数千个线程交错的非常糟糕的答案。现在我认为网格可以每1毫秒自我更新一次,每个蠕虫的新占用。这也可能是资源消耗。任何人都可以为这个问题提供更有效的解决方案。提前谢谢。

2 个答案:

答案 0 :(得分:0)

你只需要给每个蠕虫一个超时的时间,告诉他们下次移动的时间。然后,在每个帧上,按帧时间减少该超时。当超时达到0时,你移动蠕虫并给它一个新的时间。

答案 1 :(得分:0)

你的多线程算法在这里显然是一个巨大的过度杀伤力。单个线程就足够了(除非您必须针对多核系统进行优化)。

所以你创建了一个蠕虫列表。每个蠕虫都是一个保持其当前位置的对象,以及下次何时何地移动的知识等。 然后,您需要以某个频率迭代蠕虫列表,并仅重绘在最后一次屏幕/窗口刷新后移动的蠕虫。

可能的优化之一
您可以询问每个蠕虫下次移动的时间。然后你会发现蠕虫要移动的最近时刻。然后你启动一个计时器,在那个时刻(蠕虫将要移动的最近时刻)开火。当定时器触发刷新屏幕/窗口时(如前所述)并重复算法 在这种情况下,您的程序将在蠕虫的各个移动之间不执行任何操作(这将节省CPU周期)。 CPU负载将是最小的。