如何使用 SKAction 将分数添加到 SpriteKit

How to add score to SpriteKit using SKAction

runAction(SKAction.repeatActionForever(
   SKAction.sequence([
    SKAction.runBlock(addScore),
      SKAction.waitForDuration(1.0) ]) ))        

func addScore() {
        let scoreSprite = SKSpriteNode(imageNamed: "scoreSprite")

        let actualY = random1(min: scoreSprite.size.height/2, max: size.height - scoreSprite.size.height/2)

        scoreSprite.position = CGPoint(x: size.width + scoreSprite.size.width/2, y: actualY)

        self.addChild(scoreSprite)

        let actualDuration = random1(min: CGFloat(0.5), max: CGFloat(0.5))
        let actionMove = SKAction.moveTo(CGPoint(x: -scoreSprite.size.width/2, y: actualY), duration: NSTimeInterval(actualDuration))

        let actionMoveDone = SKAction.removeFromParent()
            scoreSprite.runAction(SKAction.sequence([actionMove, actionMoveDone])) }

好的,所以我希望这个人玩游戏的每一秒我的分数增加 1。我研究了使用 NSTimeInterval,但据我所知,更好的选择是使用 SKAction。我能想到的唯一方法是使用几乎清晰的精灵并每秒在屏幕上移动一次。我想知道的是每次节点在屏幕上移动时如何增加分数,或者如果这不好,还有什么更好的选择。我用来移动节点的代码在上面。提前致谢。

我通过将其添加到 scoreSprite 函数的末尾来修复它:

    if scoreSprite.position.x > endOfScreenLeft {
        updateScore()
    }

然后这样做来更新分数:

func updateScore() {
        score++
        scoreLabel.text = String(score)
    }

屏幕左侧的末尾是一个 CGFloat:

endOfScreenLeft = (self.size.width / 2) * CGFloat(-1)

尝试将此添加到您的 didMoveToView 方法中

let wait = SKAction.waitForDuration(1.0)
let incrementScore = SKAction.runBlock ({
    ++self.score
    self.scoreLabel.text = "\(self.score)"
})

self.runAction(SKAction.repeatActionForever(SKAction.sequence([wait,incrementScore])))