【问题标题】:SpriteKit Collision Detection with Transparent image带有透明图像的 SpriteKit 碰撞检测
【发布时间】:2014-11-20 21:50:29
【问题描述】:

我正在尝试通过制作类似游戏的 Flappy Bird 的教程来学习 SpriteKit。在我的游戏版本中,管道不是管道,而是不规则形状的对象,不会填满它们绘制的整个矩形画布。然而,由于画布是矩形的,SpriteKit 会在另一个物体接触角落时检测碰撞,这在技术上是不可见的。我该如何纠正?

- (void)didBeginContact:(SKPhysicsContact *)contact
{
    SKPhysicsBody *firstBody, *secondBody;

    if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask)
    {
        firstBody = contact.bodyA;
        secondBody = contact.bodyB;
    }
    else
    {
        firstBody = contact.bodyB;
        secondBody = contact.bodyA;
    }

    if ((firstBody.categoryBitMask & pillerCategory) != 0 &&
        (secondBody.categoryBitMask & flappyBirdCategory) != 0)
    {
        [self pillar:(SKSpriteNode *) firstBody.node didCollideWithBird:(SKSpriteNode *) secondBody.node];
    }
    else if ((firstBody.categoryBitMask & flappyBirdCategory) != 0 &&
            (secondBody.categoryBitMask & bottomBackgroundCategory) != 0)
    {
        [self flappyBird:(SKSpriteNode *)firstBody.node didCollideWithBottomScoller:(SKSpriteNode *)secondBody.node];
    }
}

我只有在实际接触到图片时才检测到碰撞。而不是填满所有矩形画布的管道:

【问题讨论】:

    标签: ios canvas png sprite-kit collision-detection


    【解决方案1】:

    使用自定义形状的身体。我想,this 会帮助你。

    【讨论】:

    • 感谢您的通知。链接已更新。
    【解决方案2】:

    在 iOS 8 中,您可以基于纹理的 Alpha 通道创建物理体。 (请参阅bodyWithTexture。)这可以让您获得精确的形状,但性能成本很高。

    为了平衡碰撞精度和性能,或者如果您还支持 iOS 7,您可以改为从路径创建物理体,或者通过以接近您需要的形状的方式组合多个较小的物理体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多