SpriteKit碰撞检测与透明图像

问题描述:

我想学习SpriteKit通过制作一个像飞镖一样的游戏教程。在我的游戏版本中,管道不是管道,并且是不规则形状的物体,它们不会填满它们被绘制的整个矩形画布。但是,由于画布是矩形的,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

在iOS 8中,您可以基于纹理的Alpha通道创建一个物理实体。 (请参阅bodyWithTexture。)这会为您提供确切的形状,但性能成本很高。

为了在碰撞准确性和性能之间取得平衡,或者如果您还支持iOS 7,您可以改为从路径创建物理主体,或者以近似所需形状的方式组合多个较小的物理主体。

使用自定义的形体。我认为,this会帮助你。

+0

链接已损坏。 – 2015-07-05 14:46:15

+0

感谢您通知。链接已更新。 – 2015-07-05 21:46:24