Mag*_*ave 2 iphone 2d collision-detection quartz-graphics
一直在研究这个碰撞检测问题,我可以采取三种主要方法:
精灵和面具的方法.(和精灵的重叠并检查所得到的精灵像素数据中的非零数字).
边界圆,矩形或多边形.(创建一个或多个包围精灵的形状,并执行基本数学检查重叠).
使用现有的精灵库.
第一种方法,即使它是我过去在16x16精灵块中完成它的方式,似乎没有一种简单的方法来获得单个图像像素数据和/或alpha通道在Quartz中(或OPENGL).检测边界框的重叠很容易,但是然后从重叠创建第三个图像然后测试像素是很复杂的,我的直觉是,即使我们能够使它工作也会很慢.我错过了一些整洁的东西吗?
第二种方法是将我们的精灵分成几个多边形并测试它们的重叠.多边形越多,碰撞检测越准确.好处是它速度快,而且准确.缺点是它使精灵创建更复杂.也就是说,我们必须为每个精灵创建多边形.对于速度,最好的方法是创建一个多边形树.
第三种方法我不确定,因为它涉及购买代码(或使用开源许可证).我不确定最好使用的库是什么,或者这是否会让生活更轻松,或者让我们在将它集成到我们的应用程序时遇到问题.
所以简而言之,我赞成多边形和树形方法,并且在我去编写大量代码之前,我将非常感谢您对此的看法.
最好的祝福
戴夫
考虑对精灵进行多边形化.在"背景"中保留精灵的多边形表示,并使用游戏世界的多边形版本进行碰撞测试.这会产生一些开销和额外的复杂性,但在额外的可能性方面通常是非常有益的.(动态阴影,灯光效果,独立于精灵图形的碰撞检测,更多碰撞检测方法,多边形交叉等)
否则你会陷入你所描述的基于像素的方法,这也不错.(ORing重叠)您可以自己动手或让OpenGL在帧缓冲区中执行.(我记不起来了,认为它被称为z-masking(?),...抱歉.对于小精灵,这甚至可能更慢......)考虑使用二进制空间分区技术以优化其中的一些:
例如,Quad树允许您快速找到候选精灵进行碰撞测试.它们适用于基于像素和顶点的方法.或者只使用BSPTrees.
顺便说一下:我认为碰撞检测中的像素精度实际上是一个很好的特性,我在Jump'n Runs中经常使用它.但是,也许不适用于您的游戏.