此答案假设您在 GameScene 中正确显示了分数。如果是这样,那么除了 GameScene 文件之外,还要创建另外两个 Swift 文件:1) GameState.swift 和 2) EndGameScene.swift。
在 GameState.swift 中,像这样创建一个共享实例 ...
class GameState {
var score: Int
var highScore: Int
class var sharedInstance: GameState {
struct Singleton {
static let instance = GameState()
}
return Singleton.instance
}
init() {
score = 0
highScore = 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: "highScore")
defaults.setInteger(stars, forKey: "stars")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
在 GameScene 文件中,确保您正确创建了标签。如果是这样,请找到为您的播放器创建积分的代码。也许发生碰撞的地方。然后添加 GameState 共享实例。它看起来像这样......
lblStars.text = String(format: "X %d", GameState.sharedInstance.stars)
lblScore.text = String(format: "%d", GameState.sharedInstance.score)
在您的 EndGameScene 中,确保您使用标签调用 GameState.sharedInstance。代码看起来像这样...
// Score
let lblScore = SKLabelNode(fontNamed: "ChalkboardSE-Bold")
lblScore.fontSize = 60
lblScore.fontColor = SKColor.whiteColor()
lblScore.position = CGPoint(x: self.size.width / 2, y: 300)
lblScore.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Center
lblScore.text = String(format: "%d", GameState.sharedInstance.score)
addChild(lblScore)
// High Score
let lblHighScore = SKLabelNode(fontNamed: "ChalkboardSE-Bold")
lblHighScore.fontSize = 30
lblHighScore.fontColor = SKColor.cyanColor()
lblHighScore.position = CGPoint(x: self.size.width / 2, y: 150)
lblHighScore.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Center
lblHighScore.text = String(format: "High Score: %d", GameState.sharedInstance.highScore)
addChild(lblHighScore)
然后,回到 GameScene,添加一个 gameOver 属性 ...
var gameOver = false
还是在GameScene中,添加这个方法:
func endGame() {
gameOver = true
// Save high score
GameState.sharedInstance.saveState()
let reveal = SKTransition.fadeWithDuration(0.5)
let endGameScene = EndGameScene(size: self.size)
self.view!.presentScene(endGameScene, transition: reveal)
}
一定要打电话……
endGame()
...玩家生命耗尽的地方。
您可能需要添加:
if gameOver {
return
}
... 在 GameScene 中,游戏玩法被更新。
如需更多帮助,您应该使用 Google ray wenderlich uberjump 第 2 部分。该教程中有关于保存和显示游戏分数的很好的信息和代码。