【问题标题】:cocos2d rotating sprite collision detectioncocos2d 旋转精灵碰撞检测
【发布时间】:2011-03-10 02:14:32
【问题描述】:

我有 2 个精灵,球和箭。 箭头不动。 球在它的锚点上旋转。

id rotate = [CCRotateBy actionWithDuration:.5 angle: 360];

我想在球到达箭头时检测碰撞。 试过 CGRectIntersectsRect 但它没有检测到碰撞。 有什么帮助吗? 谢谢...

【问题讨论】:

    标签: iphone cocos2d-iphone


    【解决方案1】:

    您可能不想要这个答案,但我会使用 Box2D 或 Chipmunk 并使用 Vertex Helper 应用程序来指定顶点。

    【讨论】:

    • 我正在尝试使用 Box2D。在我将锚点 (-1,-1) 设置为 Sprite 后,精灵和地体不再相互重叠。当精灵在 (-1,-1) 位置旋转时,地体保持在原点旋转。所以碰撞正在检测地体的位置。 :(
    • 那我就试试玄翁说的做吧。
    【解决方案2】:

    使用圆-圆碰撞方法..这是方法..

    -(float)asbs:(CGPoint)_arrowPos ballPos:(CGPoint)_ballPos
    {
        float x = _arrowPos.x-_ballPos.x;
        float y = _arrowPos.y-_ballPos.y;
        float xy = x*x+y*y;
    
    return xy;
    }
    
    if([self asbs:arrow.position ballPos:ball.position]<=size)
    {
    //collision
    }
    

    注意尺寸 = 球半径 + 箭头半径 * 球半径 + 箭头半径

    上面的方法是使用 a(square) + b(square) = c(square) 来检查两点之间的距离..

    【讨论】:

    • 您好,感谢您的帮助。箭头不是一个圆圈。想知道为什么尺寸变成尺寸=球半径+箭头半径*球半径+箭头半径
    • 然后改成探测半径或探测点??因为我们正在比较平方点..
    • 嗨,我设置了球的位置 - “ball.position = CGPointMake(85,85);。”旋转时,球的位置发生了变化,但是当我在控制台中打印时,“NSLog(@"ball position %f", ball.position.x);"它无法检测到当前位置。不断打印出 85 个。
    • hmm.. 球精灵是否附加到图层?
    【解决方案3】:

    您可能需要在更新方法中将球转换为世界空间,然后调用它而不是球的位置。如果它在父层中,则位置相对于其父层将始终是静态的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      • 2021-05-18
      • 2019-11-05
      • 1970-01-01
      相关资源
      最近更新 更多