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

Does Sprite Kit SKAction with time duration Slow Function Execution?

我的 Sprite 套件游戏中有一个函数,其中游戏角色死亡并有死亡动画。在同样的方法中,我设置了一些属性让我的更新函数知道游戏已经结束,这样分数就可以停止增加和其他一些东西。但是当它运行时,deathAnimation 函数似乎减慢了正在设置的其他变量的执行速度。因此,例如,当它应该停止时,分数会不断增加。为什么是这样?这与我的更新功能有关,还是具有持续时间的动画会减慢整个方法的执行速度? 提前感谢您的帮助!

这是我的 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. 确保您没有一遍又一遍地调用 deathAnimation()

  2. 确保您没有在 deathAnimation() 之前进行 enumerateChildNodesWithName

  3. 确保您没有在其他地方增加分数。

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