我几个小时前做了一个高分并经过测试,它运行良好。我的最高分是6,游戏保存了它。但是现在,我已经取得了10分,然后是12分,它仍然显示我的高分为6分。我非常确定在我之后我没有触及与该代码相关的任何内容。我做到了。 这是我的高分:
override func didMoveToView(view: SKView) {
//highscore
var HighScoreDefaults = NSUserDefaults.standardUserDefaults().integerForKey("highscore")
if (score > HighScoreDefaults) {
NSUserDefaults.standardUserDefaults().setInteger(score, forKey: "highscore")
NSUserDefaults.standardUserDefaults().synchronize()
}
var showHighscore = NSUserDefaults.standardUserDefaults().integerForKey("highscore")
highScoreText.text = "Highscore : \(showHighscore)"
highScoreText.fontSize = 34
highScoreText.fontColor = SKColor.grayColor()
}
可能出现什么问题?
编辑:因此,我将@trojanfoe编辑的代码放在override func update(currentTime: NSTimeInterval)
函数中,然后再次运行。老实说,我不知道是什么导致了这个问题,但对于那些遇到同样问题的人 - 请尝试更新而不是didMoveToView
。
答案 0 :(得分:0)
您的代码看起来应该可以正常工作,但是当 NSUserDefaults synchronize
实际将数据写入磁盘时,已发生更改(请参阅this SO question)。
如果你知道新的高分是多少,你可以通过使用这个(稍微更有效和更明显)的代码完全避免这个问题:
override func didMoveToView(view: SKView) {
//highscore
var highScore = NSUserDefaults.standardUserDefaults().integerForKey("highscore")
if (score > highScore) {
highScore = score;
NSUserDefaults.standardUserDefaults().setInteger(highScore, forKey: "highscore")
NSUserDefaults.standardUserDefaults().synchronize()
}
highScoreText.text = "Highscore : \(highScore)"
highScoreText.fontSize = 34
highScoreText.fontColor = SKColor.grayColor()
}
(即避免额外阅读NSUserDefaults
)。