如何保持一共得到了多少分

How to keep a total of how many points have been scored overall

我想跟踪这个人玩多少场比赛,总共得了多少分。例如,如果一个人玩这个游戏25次,每次得分100分,那么他的总分就是2500分。这是我在游戏中增加分数的方法:

let waitScore = SKAction.waitForDuration(1.0) //add score every second
let incrementScore = SKAction.runBlock ({
    ++self.score
    self.scoreLabel.text = "\(self.score)"}) //update score label with score
self.runAction(SKAction.repeatActionForever(SKAction.sequence([waitScore,incrementScore])))

总分会在不同的场景中显示,所以我想我需要使用NSUser默认值保存总分,将其加载到正在计算分数的游戏场景中,并以某种方式将加载的总分添加到当前分数然后保存总分?!我希望这是有道理的。

写入:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setInteger:10 forKey:@"score"];
[defaults synchronize];

阅读:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSInteger score = [defaults integerForKey:@"score"];
  • 在 class

    之外的某处定义一个便利常量 totalScoreKey
    let totalScoreKey = "totalScore"
    
  • 在AppDelegate中class注册keytotalScore,例如在init方法中

      override init()
      {
        let userDefaults = NSUserDefaults.standardUserDefaults()
        let defaultValues = [totalScoreKey: 0]
        userDefaults.registerDefaults(defaultValues)
      }
    
  • getTotalScore()阅读并returns总分。
    该方法可以在任何class

    中实现
      func getTotalScore() -> Int
      {
        let userDefaults = NSUserDefaults.standardUserDefaults()
        return userDefaults.integerForKey(totalScoreKey)
      }
    
  • updateTotalScore() 从用户默认值中读取总分 将值添加到 self.score 中并将值写回。
    该方法必须在包含变量 score

    的 class 中实现
      func updateTotalScore()
      {
        let userDefaults = NSUserDefaults.standardUserDefaults()
        var totalScore = userDefaults.integerForKey(totalScoreKey)
        totalScore += self.score
        userDefaults.setInteger(totalScore, forKey: totalScoreKey)
      }