如何使用SKAction为SpriteKit添加分数

时间:2015-07-03 15:45:00

标签: swift sprite-kit 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])) }

好的,所以我希望我的得分每增加一次,这个人就会玩这个游戏。我研究了使用NSTimeInterval但是从我可以收集的内容来看,更好的选择是使用SKAction。我能想到的唯一方法就是使用一个几乎清晰的精灵,然后每秒在屏幕上移动它。我想知道的是每次节点在屏幕上移动时如何增加分数,或者如果这不是一个更好的选择。我用来移动节点的代码在上面。提前致谢。

2 个答案:

答案 0 :(得分: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])))

答案 1 :(得分:0)

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

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

然后这样做是为了更新分数:

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

屏幕左侧是CGFloat:

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