iPhone上2D碰撞检测的最佳方法是什么?

iPhone上2D碰撞检测的最佳方法是什么?,iphone,2d,quartz-graphics,collision-detection,Iphone,2d,Quartz Graphics,Collision Detection,我一直在研究碰撞检测问题,似乎我可以采取三种主要方法: 精灵和面具的方法。(和精灵的重叠,并检查结果精灵像素数据中的非零数字) 边界圆、矩形或多边形。(创建一个或多个包含精灵的形状,并进行基本数学运算以检查重叠) 使用现有的精灵库 第一种方法,即使是我在16x16 sprite块的旧时代所采用的方法,似乎也没有一种简单的方法可以获取Quartz(或OPENGL)中的单个图像像素数据和/或alpha通道。检测边界框的重叠很容易,但是从重叠处创建第三个图像,然后测试像素是很复杂的,我的直觉是,即使我

我一直在研究碰撞检测问题,似乎我可以采取三种主要方法:

  • 精灵和面具的方法。(和精灵的重叠,并检查结果精灵像素数据中的非零数字)

  • 边界圆、矩形或多边形。(创建一个或多个包含精灵的形状,并进行基本数学运算以检查重叠)

  • 使用现有的精灵库

  • 第一种方法,即使是我在16x16 sprite块的旧时代所采用的方法,似乎也没有一种简单的方法可以获取Quartz(或OPENGL)中的单个图像像素数据和/或alpha通道。检测边界框的重叠很容易,但是从重叠处创建第三个图像,然后测试像素是很复杂的,我的直觉是,即使我们可以让它工作,也会很慢。我是不是遗漏了什么

    第二种方法是将精灵分成几个多边形,并测试它们是否重叠。多边形越多,碰撞检测越精确。好处是它速度快,而且可以精确。缺点是它使精灵的创作更加复杂。i、 例如,我们必须为每个精灵创建多边形。为了提高速度,最好的方法是创建多边形树

    第三种方法我不确定,因为它涉及购买代码(或使用开源许可证)。我不确定最好的库是什么,或者这是否会让我们的生活更轻松,或者给我们的应用程序集成带来问题

    因此,简而言之,我倾向于多边形和树的方法,在我开始编写大量代码之前,我将非常感谢您对这一点的看法

    致意


    戴夫

    考虑对你的精灵进行多边化。在“背景”中为精灵保留多边形表示,并使用多边形化版本的游戏世界进行碰撞测试。这会产生一些开销和额外的复杂性,但在额外的可能性方面通常是非常有益的。(动态阴影、照明效果、独立于精灵图形的碰撞检测、更多碰撞检测方法、多边形相交等)

    否则,您将不得不使用您描述的基于像素的方法,这也不错。 (对重叠部分进行排序)您可以自己完成,也可以让OpenGL在帧缓冲区中完成。(我记不起那些电话了,我想它叫z掩蔽(?)…对不起。 对于小精灵,这可能会更慢……考虑使用二进制空间划分技术,以优化其中的一些:

    例如,四叉树允许您快速找到碰撞测试的候选精灵。它们适用于基于像素和顶点的方法。 或者只使用树


    顺便说一句:我认为碰撞检测的像素精度实际上是一个很好的特性,我在跳跃跑中经常使用它。但是,可能不适用于您的游戏。

    除非您的游戏中有一个气球试图在仙人掌林中导航,否则像素完美碰撞几乎永远都不是正确的方法。人们不想死,因为他们鼻子上的一个像素与忍者脚上的一个像素相交。使用(一组)边界框/圆圈是快速的,而且通常是可行的。尝试不要更改精灵每个动画帧的框/圆。这会产生奇怪的效果(例如,你走到墙上,转身,突然你的脚被卡在墙上),你是怎么听说我们的气球仙人掌游戏的:o)。有用的建议,那么你是多边形还是库呢?如果你想添加你的评论作为答案,我可以投赞成票/接受。谢谢Andreas,非常有用。该游戏是一个模拟游戏,主要是一个精灵(最大3个)相互碰撞或一个更复杂的背景层。因此,听起来像是圆圈和树是前进的方向。你有图书馆方面的经验吗?Gamedev.net有很好的例子。我认为还有一个复制和可复制的四叉树impl。那里我不知道有图书馆。如果你找到一个,在这里提到它会很酷。我可以把它用于我的机器人项目。干杯,我会的。再次感谢你的指点,真的很有帮助。