【发布时间】:2023-03-21 05:22:01
【问题描述】:
一直在研究这个碰撞检测问题,我似乎可以采取 3 种主要方法:
Sprite 和蒙版方法。 (以及精灵的重叠并检查生成的精灵像素数据中的非零数字)。
包围圆形、矩形或多边形。 (创建一个或多个包围精灵的形状并进行基本数学运算以检查重叠)。
使用现有的精灵库。
第一种方法,即使它是我在过去 16x16 精灵块的方式,但似乎没有一种简单的方法来获取单个图像像素数据和/或 Quartz 中的 alpha 通道(或 OPENGL)。检测边界框的重叠很容易,但是从重叠中创建第三张图像然后测试它的像素是很复杂的,我的直觉是即使我们可以让它工作也会很慢。我在这里错过了什么整洁的东西吗?
第二种方法是将我们的精灵分成几个多边形并测试它们是否重叠。多边形越多,碰撞检测越准确。好处是它速度快,而且可以准确。缺点是它使精灵创建更加复杂。即,我们必须为每个精灵创建多边形。为了速度,最好的方法是创建一个多边形树。
我不确定第三种方法,因为它涉及购买代码(或使用开源许可证)。我不确定最好使用什么库,或者这是否会让生活更轻松,或者给我们将其集成到我们的应用程序中时遇到问题。
所以简而言之,我更喜欢多边形和树的方法,在我开始编写大量代码之前,我会感谢您对此的看法。
最好的问候
戴夫
【问题讨论】:
-
除非您的游戏中有一个气球试图在仙人掌森林中导航,否则像素完美碰撞几乎永远不是正确的方法。人们不想死,因为他们鼻子的 1 个像素与忍者脚的 1 个像素相交。
-
使用(一组)边界框/圆很快,而且通常是要走的路。尽量不要为精灵的每个动画帧更改框/圆圈。这会产生奇怪的效果(例如,你走到墙上,转身,突然你的脚卡在墙上)
-
您是如何得知我们的气球仙人掌游戏的 :o)。不过有用的建议,你是多边形还是图书馆?附:如果您想添加您的 cmets 作为答案,我可以投票/接受。
标签: iphone 2d quartz-graphics collision-detection