Design patterns 如何使用2D游戏引擎创建多个对象以随机时间间隔周期性移动的游戏?

Design patterns 如何使用2D游戏引擎创建多个对象以随机时间间隔周期性移动的游戏?,design-patterns,Design Patterns,在SDE的采访中,我被问及一个游戏设计问题。面试官想让我设计一个简单的2D游戏,让很多蠕虫在2D网格中移动。每个蠕虫占据4个细胞,并有一个头部。它在三个方向中的一个方向上移动到下一个单元格,并以随机时间间隔移动,例如50毫秒。问题是如何更新网格,许多蠕虫以不同的速度移动?我给出了一个答案,每个蠕虫都是一个线程,在其预定义的时间后移动。显然,这是一个非常糟糕的答案,可能有数千个线程交错。现在我认为网格可以每1ms更新一次,每个蠕虫都有新的职业。这也可能会消耗资源。谁能给这个问题提供一个更有效的解决

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

您只需给每个蠕虫一个超时时间,以确定它下一步的移动时间。然后,在每一帧上,将超时时间减少一帧时间。当超时达到0时,您移动蠕虫并给它一个新的超时时间。

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

因此,您创建了一个蠕虫列表。每个蠕虫都是一个对象,它保持着它当前的位置以及它下次移动的时间和地点等信息。 然后,您需要以一定的频率迭代蠕虫列表,并仅重新绘制上次屏幕/窗口刷新后移动的蠕虫

可能的优化之一
你可以问每只虫子下次什么时候移动。然后你就可以找出蠕虫移动的最近时刻。然后你启动一个计时器,它会在那个时刻(蠕虫移动的最近时刻)触发。当定时器启动时,刷新屏幕/窗口(如前所述),并重复算法。

在这种情况下,您的程序在蠕虫的单独移动之间将不会执行任何操作(即节省CPU周期)。CPU负载将是最小的。

更好的是,您有一个计数器,它在每一个刻度/帧上都会增加。然后,在开始时和每次蠕虫移动时,计算蠕虫下一步移动的时间,并将该(未来)事件放入排序数据结构(如优先级队列)。然后,在每个刻度/帧上,您只需将计数器与队列头进行比较,如果匹配,则执行相应的操作(包括计算这些实体的下一个事件),并在处理完这些事件后从队列中删除这些事件……是的,这更好——它从所有蠕虫中删除减法。小的缺点是,如果游戏持续很长时间,可能会出现迂回。