在我的GameScene中,我得到的分数是在游戏结束时通过UserDefaults保存的。以下是用于保存分数的GameScene代码。
var totalPoints = 0 {
didSet {
score.text = " \(totalPoints)"
UserDefaults.standard.set(totalPoints, forKey: "scoreDefaults")
}
}
一旦玩家失去了一生,游戏就会返回主菜单场景。在这个场景中,我想立即检索并更新主菜单场景中的高分数,如果玩家最后得分高于他们之前的高分。但由于某种原因,它只是不断更新用户在游戏结束时获得的每个分数,无论它是高于还是低于最后一个高分。我究竟做错了什么?下面是我的主菜单场景。当我打印“newScore”和“getScore”时,我确实看到了正确的值,但是当涉及在需要时更新高分时,我的代码必定是错误的。
let getScore:Int = UserDefaults.standard.integer(forKey: "scoreDefaults")
override func didMove(to view: SKView) {
if ((UserDefaults.standard.integer(forKey: "updateHighScoreDefaults")) >= 0) {
highScore.text = " \(newScore)"
} else {
print("I don't know")
}
if (getScore > newScore) {
print("New High Score!")
newScore = getScore
//print(newScore)
UserDefaults.standard.set(newScore, forKey: "updateHighScoreDefaults")
highScore.text = " \(newScore)"
} else {
print("Not a high score")
UserDefaults.standard.set(newScore, forKey: "updateHighScoreDefaults")
highScore.text = " \(newScore)"
}
}
答案 0 :(得分:0)
您的密钥错误scoreDefaults
vs updateHighScoreDefaults
选择1
此外,getScore
仅被调用一次,而是将其设为计算属性
var getScore:Int {return UserDefaults.standard.integer(forKey: "updateHighScoreDefaults")}
override func didMove(to view: SKView) {
if (getScore > newScore) {
print("New High Score!")
newScore = getScore
//print(newScore)
UserDefaults.standard.set(newScore, forKey: "updateHighScoreDefaults")
highScore.text = " \(newScore)"
} else {
print("Not a high score")
UserDefaults.standard.set(newScore, forKey: "updateHighScoreDefaults")
highScore.text = " \(newScore)"
}
UserDefaults.syncronize()
}