Spritekit - 如何创建一个像台球口袋一样的洞?

时间:2015-04-30 13:56:35

标签: ios swift sprite-kit game-physics

我正在创造一个球在屏幕上移动的游戏,我想创建一个球可以进入内部的球洞(就像台球一样)

这可能是一个黑色背景的简单圆形SKNode吗?在这种情况下,我应该在球越过洞时隐藏球(这是一个非常糟糕的效果)

其他可用功能/想法? 谢谢

1 个答案:

答案 0 :(得分:1)

在这种情况下我要做的是为洞创建一个SKSpriteNode,只有一个黑色图像作为圆圈。然后当两个节点发生碰撞时,删除球节点。我假设你在GameScene中这样做

首先,为碰撞检测器创建一个枚举:

 enum ColliderType:UInt32 {
    case ball = 1
    case blackhole = 2
}

创建基本黑洞节点

let blackHole:SKNode = SKSpriteNode(imageNamed: "NameOfImage")
    blackHole.physicsBody = SKPhysicsBody(circleOfRadius: side.size.width/2)
    blackHole.physicsBody!.dynamic = false
    //These 3 lines of code basically say to pay attention to collisions
    blackHole.physicsBody!.categoryBitMask = ColliderType.blackhole.rawValue
    blackHole.physicsBody!.contactTestBitMask = ColliderType.ball.rawValue
    blackHole.physicsBody!.collisionBitMask = ColliderType.ball.rawValue
    self.addChild(side)

此外,在您设置球的物理属性的地方,请插入此代码

(Name of Sprite).physicsBody!.categoryBitMask = ColliderType.ball.rawValue
(Name of Sprite).physicsBody!.contactTestBitMask = ColliderType.blackhole.rawValue
(Name of Sprite).physicsBody!.collisionBitMask = ColliderType.blackhole.rawValue

然后,这是您检测碰撞的地方。

func didBeginContact(contact: SKPhysicsContact)
{
    //variable stores the two things contacting
    let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask

    switch(contactMask){

    case ColliderType.ball.rawValue | ColliderType.blackhole.rawValue:
        //deletes the ball as a Node
        contact.bodyB.node?.removeFromParent()


    default:
        return



    }
}

让我知道是否有任何令人困惑或我是否需要解释更多