我有很多精灵(射击游戏),我需要测试与级别中的许多其他对象(玩家,墙壁,板条箱等)的碰撞,如果我强行使用CGRectIntersectsRect方法,它的工作正常。这个方法的问题非常明显,因为我每帧检查每个对象的每个对象。我对如何加快速度有所了解,但是在我花了几天实现某种空间分区层次结构之前,我想获得更多经验游戏开发者的洞察力(可能是cocos2d具体的)。
非常感谢任何帮助!
答案 0 :(得分:0)
我认为我们正在采用相同的方法。我做的是我在我的子弹阵列中循环,在该循环内部是我的其他sprite数组的另一个循环,以检查子弹和其他精灵的碰撞。
答案 1 :(得分:0)
您可以使用box2d来检测和处理所有碰撞。它已经使用了优化。
答案 2 :(得分:0)
一个非常简单的优化是不用每个其他对象测试每个对象。因为如果A测试与B冲突,这意味着B不必与A进行冲突,因为已经获得了结果。
如果您有200个对象,则强力方法需要40,000个测试来测试所有对象。如果你优化它以跳过已经执行的测试,你可以将测试的数量减少到几千,因为第一个对象测试另一个199,第二个测试剩下的198(因为第二个已测试与第一个碰撞),以及等等。
假设你的所有对象都在一个数组中,你遍历所有200个并在循环内迭代当前的+ 1到200.