安卓系统-碰撞检测/引擎优化-大型,开放,沙盒地图



短版本

在动态生成对象的大型开放地图中,检测碰撞的性能友好的方法是什么?

长版本

我目前正在重新制作我制作的第一款安卓游戏(https://play.google.com/store/apps/details?id=com.Joey_Ant.Lite&feature=search_result#?t=W251bGwsMSSwyLDEsImNvbS5Kb2V500FudC5MaXRlIl0.)

我正在从头开始重建它,并添加了大约一百个新功能。

游戏描述:用户将控制一个蚁群,该蚁群有一个地下的、基于网格的地图和一个地上开放的游戏场地。蚂蚁会有人工智能,可能会有大量的蚂蚁。(这意味着我需要优化所有东西。)地图的变化很大。(我计划制作一个地图创建者,让用户在线创建和下载地图。)

那么,在一张充满大量物体和其他蚂蚁/生物的地图上,检测碰撞的最佳方法是什么?我不能循环浏览所有其他对象来检测碰撞,因为这必须发生在每个生物身上,并且会占用太多的cpu时间。

我所考虑的

网格:创建任意网格对象。网格对象会创建子区域(实际网格),每当生物"思考"时。它将使用对自身的引用来更新网格对象。然后,该生物会向网格对象询问其网格内的其他对象。这有望大大减少需要进行的检查次数。但这方面的开销可能会更大。这个网格可能有利于生物检测其一般区域内的其他生物,因为人工智能决策将受到该区域内其他物体和生物的影响。

占用的网格:本质上与上述网格选项相同,只有网格对象由对象创建。假设我有3个对象(A、B和C)。当我初始化对象A时,它会创建一个具有指定宽度和高度的网格单元。对象B已初始化,但与对象A位于同一区域,因此它将自己添加到该网格区域中。对象C在区域外初始化,因此它为其位置创建一个网格单元。如果对象C进入对象A所在的单元格,则其上一个单元格将被破坏。我想你可以把它想象成吹泡泡。

有什么更好的方法吗?

这是一个很老的问题,我不知道你是否找到了解决方案,但为什么不使用已经开发的碰撞检测和物理引擎之一,而不是发明热水呢。以下是一些可能性:

  1. androidbox2d

  2. 和发动机

关于如何使用它们也有很好的例子。

最新更新