我的Sprite工具包游戏中有一个功能,游戏中的角色会死亡,并且会有死亡动画。在这个相同的方法中,我设置了一些属性,让我的更新功能知道游戏结束,这样分数可以停止增加和其他一些事情。但是当它运行时,deathAnimation函数似乎会减慢正在设置的其他变量的执行速度。因此,当应该停止时,分数会不断增加。为什么是这样?它是否与我的更新功能有关,或者持续时间长的动画是否会使整个方法立即执行? 感谢您的帮助!
这是我的死亡动画方法
func deathAnimation() {
//set shield for death
self.yourDead = true
self.shield.position = CGPointMake(self.frame.maxX * 2, self.frame.maxY + self.ape.size.height * 10)
self.shield.hidden = true
self.shieldActivated = false
//set Ape image to default
self.ape.runAction(SKAction.setTexture(SKTexture(imageNamed: "Ape"), resize: true))
self.ape.zRotation = 0
//changes physicsBody values so He doesn't collide
self.ape.physicsBody?.dynamic = false
self.ape.physicsBody?.categoryBitMask = ColliderType.Asteroid.rawValue
self.ape.physicsBody?.contactTestBitMask = ColliderType.Ape.rawValue
self.ape.physicsBody?.collisionBitMask = ColliderType.Ape.rawValue
self.ape.zPosition = 10 //bring the ape to the front
let death = SKAction.sequence([
SKAction.group([
SKAction.scaleBy(4, duration: 0.5),
SKAction.moveTo(CGPointMake(self.frame.minX + ape.size.width * 2, self.frame.minY - ape.size.width * 2), duration: 2),
SKAction.repeatAction(SKAction.rotateByAngle(CGFloat(M_PI_4), duration: 0.2), count: 8)
]),
SKAction.runBlock({self.moveToGameOverView();})
])
ape.runAction(death) //run the animation sequence
}
这是我的代码,我检查播放器是否已死,这是在更新功能内。我没有包含所有的更新功能,因为它可能比你想要的更多。
//take Asteroids off the screen and increment score
enumerateChildNodesWithName("asteroid", usingBlock: {(node: SKNode!, stop: UnsafeMutablePointer <ObjCBool>) -> Void in
//move the asteroids off the screen
node.position = CGPointMake(node.position.x, node.position.y + self.gravity)
//if it is out of screen
if node.position.y > self.frame.size.height + self.largeAsteroid.size.width {
node.removeFromParent()
if !self.yourDead { //if your not dead
self.score++
self.scoreText.text = String(self.score)
//increase Asteroid speed
if self.score > 20 * self.tensCounter {
self.gravity++
self.tensCounter++
}
}
}
})
答案 0 :(得分:0)
提供的代码看起来很好。但是你可以尝试检查一些事情。
确保您没有反复拨打deathAnimation()
。
确保您在enumerateChildNodesWithName
之前没有使用deathAnimation()
。
确保您不会在其他地方增加分数。
这些是我认为你设定self.yourDead = true
之后你的分数会继续上升的唯一原因。希望这会有所帮助。