从两个单独的SKScene中检索并立即更新高分

时间:2017-10-25 23:11:55

标签: swift sprite-kit skscene userdefaults

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

1 个答案:

答案 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()
}
相关问题