我很清楚如何检测两个或多个2D对象是否碰撞,但是我对如何决定是否检查碰撞感兴趣。在以前的项目中,我只是让每个对象都与其他每个对象进行检查(我知道,O(n ^ 2)级的愚蠢程度),并且创建的游戏性不那么流畅。
各种论坛都赞扬四叉树,B树以及您能想到的任何其他种类的树或结构的伟大之处。
确定是否应检查碰撞的最有效结构是什么?
我很清楚如何检测两个或多个2D对象是否碰撞,但是我对如何决定是否检查碰撞感兴趣。在以前的项目中,我只是让每个对象都与其他每个对象进行检查(我知道,O(n ^ 2)级的愚蠢程度),并且创建的游戏性不那么流畅。
各种论坛都赞扬四叉树,B树以及您能想到的任何其他种类的树或结构的伟大之处。
确定是否应检查碰撞的最有效结构是什么?
Answers:
对于2D游戏,除非2D对象在地图的一侧具有非常重的分布,否则几乎总是要使用统一的网格。内存复杂度是直截了当的(与您的地图尺寸成比例),并且分布合理,具有O(1)查找时间和log(numberOfObjects /(rows * column))的平均值)^ 2个交集测试每个单元完成。您可能决定只检查其中有对象移动的像元,这使静态几何更有效率。动态修改统一网格很容易(与基于树的解决方案相比,痛苦不大),并且易于实现。我唯一不说要在2D游戏中不使用它的情况是,当统一网格的内存要求变得太大时(例如,空间级别稀疏但巨大的空间模拟)。
2D物理引擎(例如Box2D和Chipmunk)大量使用了空间哈希图
请参阅http://chipmunk-physics.net/release/ChipmunkLatest-Docs/#CollisionDetection以获取参考。花栗鼠演示包括一个非常好的空间哈希可视化程序,这使它们的工作原理非常清晰。