我有很多精灵(射击游戏),我需要测试与关卡中的许多其他对象(玩家、墙壁、板条箱等)的碰撞,如果我蛮力使用 CGRectIntersectsRect 方法,它工作正常。这种方法的问题非常明显,因为我每帧都针对每个对象检查每个项目符号。我对如何加快速度有所了解,但在我花几天时间实现某种空间分区层次结构之前,我想获得更多经验游戏开发人员的洞察力(也许是 cocos2d 特定的)。
任何帮助将不胜感激!
我有很多精灵(射击游戏),我需要测试与关卡中的许多其他对象(玩家、墙壁、板条箱等)的碰撞,如果我蛮力使用 CGRectIntersectsRect 方法,它工作正常。这种方法的问题非常明显,因为我每帧都针对每个对象检查每个项目符号。我对如何加快速度有所了解,但在我花几天时间实现某种空间分区层次结构之前,我想获得更多经验游戏开发人员的洞察力(也许是 cocos2d 特定的)。
任何帮助将不胜感激!
一个非常简单的优化是不要用每个其他对象测试每个对象。因为如果 A 测试与 B 的碰撞,这意味着 B 不必与 A 发生碰撞,因为结果已经获得。
如果您有 200 个对象,那么蛮力方法需要 40,000 次测试来测试所有对象之间的相互关系。如果您对此进行优化以跳过已经执行的测试,您可以将测试数量减少到几千个,因为第一个对象测试其他 199 个,第二个测试剩余的 198 个(因为第二个已经测试过的与第一个发生碰撞),并且很快。
假设您的所有对象都在一个数组中,您遍历所有 200 个对象,并在循环内遍历 current + 1 到 200 个对象。
我认为我们正在使用相同的方法。我所做的是在我的子弹数组中循环,在该循环内是另一个循环,用于我的其他精灵数组,以检查子弹和其他精灵的碰撞。
您可以使用 box2d 来检测和处理所有碰撞。它已经使用了优化。