在进行联系时从场景中删除精灵

时间:2015-08-05 17:02:21

标签: ios swift sprite-kit collision-detection

因此,在我的游戏中,我希望真正让生活指数更具活力,而不仅仅是一个倒计时的标签。我在屏幕上添加了三个精灵:

Life sprite

这些代码在for循环中插入:

// Add Life to player

    var lifeIndexCount = 0
    var positionAdd:CGFloat = 10.0

    for lifeIndexCount in 0..<3 {

        let lifeIndex = SKSpriteNode(imageNamed: "bullet.png")

        lifeIndex.position = CGPoint(x: self.frame.size.width * -1.5, y: self.frame.size.height * 0.93)

        let lifeIndexMove = SKAction.moveTo(CGPoint(x: (size.width * 0.05) + positionAdd, y: size.height * 0.93), duration: NSTimeInterval(0.7))

        let lifeIndexRotation = SKAction.rotateByAngle(CGFloat(-2 * M_PI), duration: 0.3)

        lifeIndex.runAction(SKAction.sequence([lifeIndexMove, lifeIndexRotation]))

        addChild(lifeIndex)

        positionAdd = positionAdd + 25.0

我想在玩家船只未击中后立即移除每一个。就像一个生活精灵旋转和获取屏幕的小动画。我已经设置了我的联系代表,但我不知道如何抓住它们并制作动画,以便在发生未命中时它们可以关闭。

func didBeginContact(contact: SKPhysicsContact) {

    var contactBody1: SKPhysicsBody
    var contactBody2: SKPhysicsBody

    if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {

        contactBody1 = contact.bodyA
        contactBody2 = contact.bodyB

    } else {

        contactBody1 = contact.bodyB
        contactBody2 = contact.bodyA

    }

    if ((contactBody1.categoryBitMask == 1) && (contactBody2.categoryBitMask == 2)) {

        //Run when the bullet contacts the line

        contactBody2.node!.removeFromParent()

        // I WANT TO INSERT CODE HERE TO REMOVE A LIFE AT THE TOP


    } else if ((contactBody1.categoryBitMask == 2) && (contactBody2.categoryBitMask == 4)) {

        //Run when the bullet contacts the limbo

    }

}

谢谢!

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点,但它们几乎可以归结为给你想要动画的节点并删除一个名称,并在didBeginContact:中匹配该名称。我喜欢enumerateChildNodesWithName的可读性和易用性。如果您的用例具有类似arrowSprite1,arrowSprite2等的内容,则模式匹配非常方便...

清理节点可能正在执行的任何操作也是一个好主意,例如取消SKActions或发送给选择器的请求。

https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKNode_Ref/index.html#//apple_ref/occ/instm/SKNode/enumerateChildNodesWithName:usingBlock