因此,在我的游戏中,我希望真正让生活指数更具活力,而不仅仅是一个倒计时的标签。我在屏幕上添加了三个精灵:
这些代码在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
}
}
谢谢!
答案 0 :(得分:1)
有几种方法可以做到这一点,但它们几乎可以归结为给你想要动画的节点并删除一个名称,并在didBeginContact:
中匹配该名称。我喜欢enumerateChildNodesWithName
的可读性和易用性。如果您的用例具有类似arrowSprite1,arrowSprite2等的内容,则模式匹配非常方便...
清理节点可能正在执行的任何操作也是一个好主意,例如取消SKActions或发送给选择器的请求。