NSUserDefault GlobalData / Base场景多个“键”总计

时间:2016-03-01 02:14:15

标签: swift sprite-kit persistence nsuserdefaults global-scope

我有多个场景存储在Global / BaseScene

每个SceneType:存储为枚举:设置为类似于此present scene的整数

第一个目标是让得分在每个场景中填充,其中有七个。由于堆栈溢出和实验

完成

我必须为每个场景创建默认密钥,以计算highScore,因此我为每个场景提供了七个独特的“highScore”“键”。

在GameScene中:

var highScoreA1: Int = 0  
    var score: Int = 0 {
         didSet { 
             a1Score.text = "Score: \(score)"
         }
      }

//above called before override func didMoveToView(view: SKView) { 

//Called in GameOver Method 
let scoreDefault = NSUserDefaults.standardUserDefaults()
scoreDefault.setInteger(score, forKey: "score")

if (score > highScoreA1){

let highScoreA1Default = NSUserDefaults.standardUserDefaults() 

highScoreA1Default.setInteger(score, forKey: "highScoreA1")
//highscoreA1Default.synchronize()         

还有六个与此相似的键。我的目标是在两个不同的场景中填充“totalScoreKey”Hud场景和另一个场景(可能是场景上的游戏)

我在考虑将这些键添加到一起以填充总分的功能。 考虑到所有这些场景都是子类(Global BaseScene,每个场景都有子类(对于节点操作,可能不相关但认为它可能有用)

我试过:将所有得分数据移动到一个类中并使用NSCoding / NSObject所需的init和可选绑定变得非常痛苦,老实说我正在努力保持版本的简单一。

import Foundation

    class GameState {
        var score:Int = 0
        var highScore:Int()
        var totalScore:Int()

        class var sharedInstance: GameState {
            struct Singleton {
                static let instance = GameState()
            }

            return Singleton.instance
        }
    }
    init() {
        // Init
        score.type = 0
        highScore = 0
        totalScore = 0

        // Load game state
        let defaults = NSUserDefaults.standardUserDefaults()

        highScore = defaults.integerForKey("highScore")

    }

    func saveState() {
        // Update highScore if the current score is greater
        highScore = max(score, highScore)

        // Store in user defaults
        let defaults = NSUserDefaults.standardUserDefaults()
        defaults.setInteger(highScore, forKey: "highScore")
        defaults.setInteger(totalScore, forKey: "totalScore")
        NSUserDefaults.standardUserDefaults().synchronize()
    }

没有工作的各种功能都默认为零,直到我弄清楚如何正确检索数据。

let total score = "totalScoreKey"

与这篇帖子类似,但实际上除了因为我的个人设置而不得不做不同的配置以外...

total Score example I tried to implement

在课外,并指在场景中我需要填充该数据。 NO Go默认为零。

如何简单地将这些键的值加在一起?对于我可以显示类似于其他场景,我已经实现了。 后来我可能想要分配一个钥匙链值,现在我只是想让它出现在GameCenter上发布。 (也有关键的“GameCenterHighScore”)

将它们设置为相同的键“highScore”不起作用....只是为了清楚,我尝试了多次。提前致谢。

修改 如果我尝试将所有默认值一起添加以获得总数,则会引发以下错误:

  

表达太复杂,无法在合理的时间内解决;考虑   将表达式分解为不同的子表达式   [Swift复合算术运算ERROR 3

0 个答案:

没有答案