Sprite Kit SKAction是否具有持续时间慢功能执行?

时间:2015-05-31 22:18:24

标签: swift sprite-kit sprite updates skaction

我的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++
                }
            }
        }
    })

1 个答案:

答案 0 :(得分:0)

提供的代码看起来很好。但是你可以尝试检查一些事情。

  1. 确保您没有反复拨打deathAnimation()

  2. 确保您在enumerateChildNodesWithName之前没有使用deathAnimation()

  3. 确保您不会在其他地方增加分数。

  4. 这些是我认为你设定self.yourDead = true之后你的分数会继续上升的唯一原因。希望这会有所帮助。