【问题标题】:How to save a highscore to a game in swift with UserDefaults? [duplicate]如何使用 UserDefaults 快速将高分保存到游戏中? [复制]
【发布时间】:2016-12-04 12:35:41
【问题描述】:

到目前为止,这是我所做的,但我的高分没有改变。

我忽略了所有不相关的变量等

如果有人可以帮助我,那就太好了。我一直在尝试这样做 2 天大声笑帮助

class GameScene: SKScene, SKPhysicsContactDelegate {

    var score = Int()

    let scoreLabel = SKLabelNode()

    var highScoreLabel = SKLabelNode()

    var highScore = UserDefaults().integer(forKey: "HIGHSCORE")


    func createScene(){



        self.physicsWorld.contactDelegate = self

        scoreLabel.position = CGPoint(x: self.frame.width / 2, y:     self.frame.height / 2 + self.frame.height / 3)
        scoreLabel.text = "\(score)"
        scoreLabel.zPosition = 5
        scoreLabel.fontSize = 60
        scoreLabel.fontColor = UIColor.white
        self.addChild(scoreLabel)

        highScoreLabel.text = "High Score = \(UserDefaults().integer(forKey: "HIGHSCORE"))"
        highScoreLabel.fontColor = UIColor.white
        highScoreLabel.position = CGPoint(x: 120, y: 20)
        addChild(highScoreLabel)

        highScoreLabel.zPosition = 6



    func didBegin(_ contact: SKPhysicsContact) {
        let firstBody = contact.bodyA
        let secondBody = contact.bodyB

        if firstBody.categoryBitMask == physicsCategory.score && secondBody.categoryBitMask == physicsCategory.man{


            score += 1
            scoreLabel.text = "\(score)"
            firstBody.node?.removeFromParent()

            if score < UserDefaults().integer(forKey: "HIGHSCORE") {
                saveHighScore()
            }


        }
        else if firstBody.categoryBitMask == physicsCategory.man && secondBody.categoryBitMask == physicsCategory.score{

            score += 1
            scoreLabel.text = "\(score)"
            secondBody.node?.removeFromParent()

            if score > UserDefaults().integer(forKey: "HIGHSCORE") {
                saveHighScore()
            }

        }


   func saveHighScore() {

        UserDefaults.standard.integer(forKey: "HIGHSCORE")
        highScoreLabel.text = "High Score = \(UserDefaults().integer(forKey: "HIGHSCORE"))"


    }

【问题讨论】:

    标签: swift swift3 userdefaults


    【解决方案1】:

    试试这个

    func saveHighScore() {
    UserDefaults.standard.set(score, forKey: "HIGHSCORE")
    }
    

    【讨论】:

    • UserDefaults.standard.synchronize() 是旧的;不再需要将对象保存到 UserDefaults。否则很好的答案!
    • 感谢您的快速回复!不幸的是它没有工作:(@penatheboss 你知道如何在新的 Swift 3 中做到这一点吗??任何帮助表示赞赏。
    • @niX 这不是我的答案;但是它应该仍然有效。究竟是什么不工作?
    • 当我摆脱同步时它最终工作了。我用 highScoreLabel.text = "High Score = (UserDefaults().integer(forKey: "HIGHSCORE"))" 交换了行 UserDefaults.standard.set(score, forKey: "HIGHSCORE")"
    • @niX 感谢您的关注!我编辑了我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    相关资源
    最近更新 更多