Iphone 为什么';游戏关闭并再次启动后,我的最佳得分值是否加载?
如果游戏继续运行,我的最佳分数值工作得很好,但是如果游戏关闭并再次启动,它将不会加载最佳分数。每当它再次发射时,它就会回到零 以下是我正在做的:Iphone 为什么';游戏关闭并再次启动后,我的最佳得分值是否加载?,iphone,swift,sprite-kit,Iphone,Swift,Sprite Kit,如果游戏继续运行,我的最佳分数值工作得很好,但是如果游戏关闭并再次启动,它将不会加载最佳分数。每当它再次发射时,它就会回到零 以下是我正在做的: import SpriteKit class EM: SKScene, SKPhysicsContactDelegate { var bestScoreText = SKSpriteNode() let bestScoreCategory: UInt32 = 1 << 4 var bestScoreLabelNode = SKLab
import SpriteKit
class EM: SKScene, SKPhysicsContactDelegate {
var bestScoreText = SKSpriteNode()
let bestScoreCategory: UInt32 = 1 << 4
var bestScoreLabelNode = SKLabelNode()
var bestScore = NSInteger()
override func didMoveToView(view: SKView) {
/* Setup your scene here */
var bestScore = 0
var bestScoreDefault = NSUserDefaults.standardUserDefaults()
bestScore = NSUserDefaults.standardUserDefaults().integerForKey("bestScore")
}
func didBeginContact(contact: SKPhysicsContact) {
if (score > bestScore) {
bestScore = score
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setInteger(bestScore, forKey: "bestScore")
defaults.synchronize()
}
} else {
......
}
}首先,不要使用可选值,分数应该永远不会为零 处理
用户默认值的常用方法是注册键值对,使其具有可靠的默认值
因此,在AppDelegate中—尽快—编写
let defaults = NSUserDefaults.standardUserDefaults()
let defaultValues = ["bestScore" : 0]
defaults.registerDefaults(defaultValues)
在每次应用程序启动时调用此代码并不重要。
如果用户默认值
数据库中存在任何键,则忽略默认值
将变量bestScore
声明为非可选Int
,起始值为0。
由于Int
是默认类型,因此可以省略该类型
var bestScore = 0
要从用户默认值中读取高分,请使用
bestScore = NSUserDefaults.standardUserDefaults().integerForKey("bestScore")
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setInteger(bestScore, forKey: "bestScore")
defaults.synchronize()
不需要检查nil
,因为我们知道默认的非可选值为0
要将高分写入用户默认值
使用
bestScore = NSUserDefaults.standardUserDefaults().integerForKey("bestScore")
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setInteger(bestScore, forKey: "bestScore")
defaults.synchronize()
好啊这很有帮助。应用程序委托中的“默认值”出现声明错误。我已经更新了我的应用程序代理的外观。我想我搞砸了。代码必须放在一个方法中。把它放在didsfinishlaunchingwithoptions
或更好,实现awakeFromNib
我按照你说的做了所有事情,但仍然不起作用。我已经用你所说的更新了我的代码。所以,当我从var最佳分数中去掉可变部分时,它起作用了。