SpriteKit碰撞检测与透明图像

时间:2014-09-26 00:21:38

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

我正在尝试通过制作像Game这样的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];
    }
}

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

enter image description here

2 个答案:

答案 0 :(得分:1)

在iOS 8中,您可以根据纹理的Alpha通道创建物理实体。 (参见bodyWithTexture。)这可以让你获得精确的形状,但性价比很高。

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

答案 1 :(得分:-1)

使用定制的身体。我想,this会帮助你。