iOS-如何检测两个或多个对象是否碰撞



如何检测两个或多个对象是否碰撞?我只想使用默认的框架,比如核心图形。或者我必须使用Box2d或Cocos2d?

编辑你说得对,问题不是很清楚。因此,情况如下:我有多个随加速度计移动的UIImageView,但我希望当两个或多个图像碰撞时,它们不会相互重叠。清楚了吗?

您可能想要一个多步骤的过程。

首先,为每个对象定义一个"中心"one_answers"半径",这样在选定半径处围绕中心绘制的线将完全包围对象,而不会"有太多额外"。(你可以定义你如何努力定义中心和半径,以防止"太多"。)

可选的下一步是以某种方式将屏幕划分为象限/部分,并计算哪些对象(基于它们的中心和半径)完全位于一个象限内,这些对象横跨一个象限边界,这些象限边界横跨4个象限,等等。这允许您对下一步进行子集设置,并且只考虑在同一象限中的对象对,或者其中一个是一种或另一种跨骑器的对象对。

然后,在每对物体之间,使用勾股定理计算中心到中心的距离。如果这个距离小于两个物体半径之和,那么就有可能发生碰撞。

最后,您必须认真计算实际碰撞。根据对象的形状,有几种不同的方法。显然,圆形被前面的步骤覆盖,正方形/矩形(与X/Y轴对齐)可以很好地计算,但奇怪的形状更难。一种方案是,在一对"空白"画布上绘制两个对象,然后逐像素将两者进行AND运算,看看是否在任何地方都能得到1。这个方案有几种变体。

如前所述,您的问题非常模糊,因此很难简洁地回答。但为了给你一些思路,你可以用核心动画来实现,尽管一些第三方游戏引擎/框架可能更高效。

从本质上讲,你可以创建一个经常触发的计时器(触发频率取决于你碰撞的物体的大小和速度——太慢了,物体可能会在计时器触发之前碰撞并通过——数学是你的朋友)。

每次计时器启动时,您都会检查屏幕上的每个对象是否和其他对象发生冲突。为了提高效率,你应该确保你只检查每对一次——也就是说,如果你有A、B、C、D对象,请检查A&D而不是D&A.

如果您有一个碰撞控制柄,可以根据需要进行处理(动画/点/通知/您想做的任何事情)。

这里的帖子太多了。我建议在cocoawithlove上查看关于小行星游戏的精彩文章,尤其是第3部分(尽管不是iOS,但原理是一样的):http://cocoawithlove.com/2009/03/asteroids-style-game-in-coreanimation.html

最新更新