使用 UserDefaults 在 swift 中保存高分
Using UserDefaults to save a high score in swift
每次玩家退出应用程序时,我都试图获得高分以保存,但我正在努力让它工作,我对我在哪里犯了错误感到困惑。
var gameSettings = Settings.sharedInstance
let HIGHSCORE = "HIGHSCORE"
if gameSettings.highScore < score{
gameSettings.highScore = score
UserDefaults.standard.set(gameSettings.highScore, forKey: HIGHSCORE)
}
if gameSettings.highScore >= score{
gameSettings.score = score
}
let gameOverHighScore = SKLabelNode()
gameOverHighScore.name = "gameOverHighScore"
gameOverHighScore.fontName = "Helvetica Neue UltraLight"
if let HIGHSCORE = UserDefaults.standard.value(forKey: HIGHSCORE) {
gameOverHighScore.text = "HIGHSCORE : \(HIGHSCORE)M"
}
gameOverHighScore.fontColor = SKColor.white
gameOverHighScore.position = CGPoint(x: 0, y: -175)
gameOverHighScore.fontSize = 70
gameOverHighScore.zPosition = 52
addChild(gameOverHighScore)
这里有一个关于如何操作的简单示例:
let firebaseId = user.uid // Variable we want to save
UserDefaults.standard.set(firebase, forKey: "firebase") // Saving the variable with key "firebase"
现在要检索:
if let firebaseId = UserDefaults.standard.string(forKey: "firebase") {
print("Firebase ID: \(firebase)")
}
在你的代码中,你正在检索到 HIGHSCORE,你应该检索到类似 gameSettings.highScore 的内容(根据我从你的代码中可以推断出的内容)
在if let HIGHSCORE = UserDefaults.standard.value(forKey: HIGHSCORE) {
gameOverHighScore.text = "HIGHSCORE : \(HIGHSCORE)M"
}
您正在尝试在 UserDefaults 中查找值,而不是通过键 HIGHSCORE,而是通过 ANY 类型的新值 HIGHSCORE。如果你想修复它,你可以这样做:
if let HIGHSCORE = UserDefaults.standard.value(forKey: self. self.HIGHSCORE) as! Int {
gameOverHighScore.text = "HIGHSCORE : \(HIGHSCORE)M" }
或者您可以使用另一个名称将值解包为新值。并且不要忘记将值转换为适当的类型或使用
UserDefaults.standard.integer(forKey: self.HIGHSCORE)
每次玩家退出应用程序时,我都试图获得高分以保存,但我正在努力让它工作,我对我在哪里犯了错误感到困惑。
var gameSettings = Settings.sharedInstance
let HIGHSCORE = "HIGHSCORE"
if gameSettings.highScore < score{
gameSettings.highScore = score
UserDefaults.standard.set(gameSettings.highScore, forKey: HIGHSCORE)
}
if gameSettings.highScore >= score{
gameSettings.score = score
}
let gameOverHighScore = SKLabelNode()
gameOverHighScore.name = "gameOverHighScore"
gameOverHighScore.fontName = "Helvetica Neue UltraLight"
if let HIGHSCORE = UserDefaults.standard.value(forKey: HIGHSCORE) {
gameOverHighScore.text = "HIGHSCORE : \(HIGHSCORE)M"
}
gameOverHighScore.fontColor = SKColor.white
gameOverHighScore.position = CGPoint(x: 0, y: -175)
gameOverHighScore.fontSize = 70
gameOverHighScore.zPosition = 52
addChild(gameOverHighScore)
这里有一个关于如何操作的简单示例:
let firebaseId = user.uid // Variable we want to save
UserDefaults.standard.set(firebase, forKey: "firebase") // Saving the variable with key "firebase"
现在要检索:
if let firebaseId = UserDefaults.standard.string(forKey: "firebase") {
print("Firebase ID: \(firebase)")
}
在你的代码中,你正在检索到 HIGHSCORE,你应该检索到类似 gameSettings.highScore 的内容(根据我从你的代码中可以推断出的内容)
在if let HIGHSCORE = UserDefaults.standard.value(forKey: HIGHSCORE) {
gameOverHighScore.text = "HIGHSCORE : \(HIGHSCORE)M"
}
您正在尝试在 UserDefaults 中查找值,而不是通过键 HIGHSCORE,而是通过 ANY 类型的新值 HIGHSCORE。如果你想修复它,你可以这样做:
if let HIGHSCORE = UserDefaults.standard.value(forKey: self. self.HIGHSCORE) as! Int {
gameOverHighScore.text = "HIGHSCORE : \(HIGHSCORE)M" }
或者您可以使用另一个名称将值解包为新值。并且不要忘记将值转换为适当的类型或使用
UserDefaults.standard.integer(forKey: self.HIGHSCORE)