【问题标题】:Collision without CGRectIntersectsRect没有 CGRectIntersectsRect 的碰撞
【发布时间】:2014-03-12 19:25:27
【问题描述】:

我目前正在使用 xcode 开发游戏。我唯一的问题是我有复杂的图像,我只希望在图像相互接触而不是实际边界框时检测到碰撞。有什么方法可以在没有 CGRectIntersectsRect 的情况下找到非矩形复杂图像之间的碰撞检测。

如果有人能提供帮助,将不胜感激。

【问题讨论】:

  • 你使用什么框架?是 Spritekit 吗?
  • 不,我在这个项目上断断续续有一段时间了,在 sprite kit 出来之前就开始了。
  • 那是什么?您是否只使用 UI 元素,例如 UIImageView 作为精灵?或者是 Cocos2d?
  • 我用过 UIImageViews

标签: ios objective-c collision-detection cgrect


【解决方案1】:

我建议使用较小的 CGRect,从左/右和上/下边缘减去一些偏移量,然后使用 CGRectIntersectRect。 您还可以检查点与 rect 的交互:

UIImageView *sprite = //Your sprite;
CGPoint point = CGPointMake(5,5);
BOOL isPointInsideSprite = [sprite pointInside:point withEvent:nil];

第二种解决方案更昂贵但更精确。

【讨论】:

    【解决方案2】:

    呃...好吧,你要的东西很难。

    要检查两个图像是否发生碰撞,您可以使用另一张图像的 alpha 蒙版渲染一个图像,然后检查该图像是否完全透明......但这很慢 em>,碰撞检测需要快速

    碰撞检测(模型级别的东西)取决于您使用的精灵(视图级别的东西)也有点奇怪。你更新了艺术风格,突然间游戏变得更难了!

    因此,大多数游戏,甚至 3D 游戏,都使用简单得多的形状来执行命中检测。圆形和矩形碰撞的计算效率远高于任意位图,因此,如果您定义了一个好的边界框(可以是矩形或圆形等),您可以获得更好的性能。

    现在...如果您确实需要一个奇异的形状,而圆形和矩形不是足够好的近似值怎么办?好吧,您可以定义任意多边形相交算法……如果这确实是您进行命中检测所需的方式。但是您仍然想用抽象的形状而不是图像来表示命中检测区域。如果这是你需要走的路,研究多边形相交算法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多