【发布时间】:2015-11-10 18:37:29
【问题描述】:
它应该是当我的玩家达到一个新的高分时,它会在 GameOver 场景中显示它,但在这种情况下,它没有这样做。我的所有 NSUserDefaults 都在一个单独的 .swift 文件中。
这是我的代码:
import Foundation
class GameState {
var score: Int
var highScore: Int
var stars: Int
class var sharedInstance :GameState {
struct Singleton {
static let instance = GameState()
}
return Singleton.instance
}
init() {
// Init
score = 0
highScore = 0
stars = 0
// Load game state
let defaults = NSUserDefaults.standardUserDefaults()
highScore = defaults.integerForKey("highScore")
stars = defaults.integerForKey("stars")
}
func saveState() {
// Update highScore if the current score is greater
highScore = max(score, highScore)
// Store in user defaults
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setInteger(highScore, forKey: "highScoreLabel")
defaults.setInteger(stars, forKey: "stars")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
在我的 GameOver 场景中,我将所有文本标签设置如下:
lblHighScore.text = String(format: "High Score: %d", GameState.sharedInstance.highScore)
在我的 GameScene 中,我有它,以便它应该在游戏结束时同步:
func endGame() {
gameOver = true
GameState.sharedInstance.saveState() //right here
print("saved score")
let reveal = SKTransition.fadeWithDuration(0.5)
let gameScene = GameOver(size: self.scene!.size)
view!.presentScene(gameScene, transition: reveal)
print("new scene")
}
有什么遗漏吗?如有必要,将发布更多代码。
【问题讨论】:
标签: swift sprite-kit nsuserdefaults