如何删除 didBeginContact 中的 SKSpriteNode

How To Remove a SKSpriteNode in didBeginContact

如何删除 didBeginContact 方法中的 SKSpriteNode? 我将节点作为全局变量(节点:SKSpriteNode!),并且我在几个函数中更改了它的位置。但是,当它与另一个物体接触时,我想将它从屏幕上移除。我应该如何做到这一点?

 func didBeginContact(contact: SKPhysicsContact) {
    let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask

    switch contactMask {
    case ColliderType.Star.rawValue | ColliderType.Cup.rawValue:
        println("")
    default:
        return

只需使用 removeFromParent() 方法将其从其父项中删除:

sprite.removeFromParent()

我不明白你为什么在屏幕上有多个球时使用全局变量。

如果球的 categoryBitMaskbitMaskBall,您可以从父节点中删除传递给 didBeginContact

的接触对象中的节点
func didBeginContact(contact: SKPhysicsContact) {

    var ball : SKNode? = nil
    // Change it to categoryBitMask of the ball sprite
    if contact.bodyA.categoryBitMask == bitMaskBall &&  contact.bodyB.categoryBitMask == bottomBitMask { 
        ball = contact.bodyA.node
    }
    else if contact.bodyB.categoryBitMask == bitMaskBall && contact.bodyA.categoryBitMask == bottomBitMask {
        ball = contact.bodyB.node
    }

    ball?.removeFromParent()

}

条件使用球的 categoryBitMask 检查接触中是否有任何物体是球。然后我们把碰撞体内的节点提取出来,最后去掉。