0

在我的 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)"
            } 
    }
4

1 回答 1

0

你的钥匙错了scoreDefaultsvs updateHighScoreDefaults Pick 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()
}
于 2017-10-26T13:32:42.103 回答