spritekit游戏开发的数据存储之NSUserDefaults

在游戏开发中,我们一般要保存游戏数据,例如:玩家游戏的得分,玩家的进度,玩家的等级等等数据,这样玩家再次进入游戏后,就不需要重新来过。

在spritekit中,保存游戏数据的方式有好多种,例如使用sqlite数据库,使用NSCoder,使用文本txt,plist文件,json文件,NSUserDefaults等,今天我就介绍NSUserDefaults,它本质其实也是plist,但是苹果把他包装了一遍而已,方便大家使用!

一般来说,我们假设目前在做的是一款刷积分的游戏,目前玩家分数是score是100分,我们就可以在游戏退出,暂停等多个地方保存游戏分数

 NSUserDefaults.standardUserDefaults().setInteger(100, forKey: "score")

setInteger这个方法是保存整数型数据,你看到这也就猜出来了,它肯定提供了setBool等其他类型的数据。

当游戏再次加载,或者重新进入激活的时候,就能根据上面设置的key找出储存的数据

 var score = NSUserDefaults.standardUserDefaults().integerForKey("score")
 print(score)
对于这些基本数据类型,例如Int,Bool等数据,通过integerForKey获得的是值的复制,不是引用,所以你不能通过score = 80 这样修改保存在score key里的值,只能重新设置。

例如:

 NSUserDefaults.standardUserDefaults().setInteger(100, forKey: "score")
        
        var score = NSUserDefaults.standardUserDefaults().integerForKey("score")
        print(score)
        score = 10
        var scoreCopy = NSUserDefaults.standardUserDefaults().integerForKey("score")
        print(scoreCopy)
        
        //打印出来都是100
        

NSUserDefaults不仅可以存储简单的数据类型,还可以存储复杂的数据类型,字典,数据,对象等,我们就保存一个玩家多次获取的分数的数组,用来做分数排行榜:

  let scoreArray = [100,56,34,65,67]
        NSUserDefaults.standardUserDefaults().setObject(scoreArray, forKey: "scoreList")
        let scoreList = NSUserDefaults.standardUserDefaults().arrayForKey("scoreList")
        print(scoreList!)

也可以存字典

let entityScoreDic = ["bird":100,"egg":50]
        NSUserDefaults.standardUserDefaults().setObject(entityScoreDic, forKey: "entity")
        let entityScore = NSUserDefaults.standardUserDefaults().valueForKey("entity") as! [String:Int]
        print(entityScore)

当然也可以存数组字典,这里就不一一解释了,其实NSUserDefaults还有很多其他用法,我这里就不一一举例了,大家可以到时候自己尝试!



你可能感兴趣的:(Swift,Sprite,Kit)