使用CGRectIntersectsRect进行冲突检测

时间:2010-04-09 06:28:32

标签: iphone collision-detection

我有一个长矩形图像,它以不同的角度旋转。然而,矩形图像的框架不随图像一起旋转,而是旋转使框架变得更大以适合旋转的图像。因此,当我使用CGRectIntersectsRect时,碰撞检测完全关闭,因为与矩形图像碰撞的另一个图像在到达rect图像的可见区域之前将发生碰撞。 如果您真的不知道我在说什么,请查看ascii绘图:

普通矩形图像帧,O - >像素,|, - - >帧

|----------|
|OOOOOOOOOO|
|----------|
旋转后

|----------|
|O         |
| O        |
|  O       |
|   O      |
|    O     |
|     O    |
|      O   |
|       O  |
|        O |
|----------|

我已经阅读了一些碰撞文章,但他们所有人都在讨论与普通直线矩形的碰撞,而我真正想要的是与倾斜图像的碰撞,最好是像素碰撞检测。 TIA提出的任何建议。

2 个答案:

答案 0 :(得分:1)

如果您使用的是Mac,则可以使用-[NSImage hitTestRect:withImageDestinationRect:context:hints:flipped:]来确定特定矩形是否与图像中的非透明像素相交。请参阅标题注释以了解用法。

答案 1 :(得分:0)

您无法使用frame的{​​{1}}属性对旋转的对象进行碰撞,因为UIView在您开始转换视图后不再有效。您需要提出一些自定义解决方案。究竟是什么取决于许多事情,尤其是表现。

您可以为图像创建几何碰撞包络,您可以将其与图像一起旋转。或者您可以使用像素完美的碰撞检测结合简单的边界检查,以避免在可能的情况下进行昂贵的像素检查。并且,如果你真的想要获得幻想,你可以使用一些全功能的物理模拟器,例如Box2D

如果您需要更好的建议,请提供更多详细信息。您多久需要检查一次碰撞?一旦?每秒40次?