Sprite Kit 最后得分数据
Sprite Kit Last Score Data
我在 Swift 中使用 Sprite Kit 制作了一个简单的游戏。
Score 和 HighScore 定义为 NSInteger
。玩家点击 GameOver 后,场景会自行重启。
现在我想保存最后的乐谱并在新呈现的场景中显示。
我只有 1 个场景 (GameScene)。
我怎样才能访问最后的分数并每次都跟踪它?
我的代码:
override func didMoveToView(view: SKView) {
//Score System
Score = 0
ScoreLabelNode = SKLabelNode(fontNamed:"04b_19")
ScoreLabelNode.position = CGPoint(x: self.frame.size.width / 2,y: self.frame.size.height / 1.06)
ScoreLabelNode.zPosition = 100
ScoreLabelNode.text = String(Score)
HighScore = 0
let defaults = NSUserDefaults.standardUserDefaults()
HighScore = defaults.integerForKey("highscore")
defaults.synchronize()
HighScoreLabel = SKLabelNode(fontNamed:"04b_19")
HighScoreLabel.fontSize = 30
HighScoreLabel.position = CGPoint(x: TransparentLayer.position.x, y: TransparentLayer.position.y)
HighScoreLabel.zPosition = 100
HighScoreLabel.text = String(format: "Best: %d", HighScore)
self.addChild(HighScoreLabel)
}
func saveHighScore(){
//Update HighScore if currentScore is higher
HighScore = max(Score, HighScore)
//Store in user defaults
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setInteger(HighScore, forKey: "highscore")
NSUserDefaults.standardUserDefaults().synchronize()
}
func Restart(){
self.saveHighScore()
let Transition = SKTransition.fadeWithDuration(1.5)
let Scene = GameScene(size: self.frame.size)
scene?.scaleMode = SKSceneScaleMode.AspectFill
self.scene?.view?.presentScene(Scene, transition: Transition)
}
在 GameScene
中创建一个名为 lastScore
的 属性 并在显示新的 scene
之前设置它。
class GameScene {
var lastScore = 0
override func didMoveToView(view: SKView) {
Score = 0
ScoreLabelNode = SKLabelNode(fontNamed:"04b_19")
ScoreLabelNode.position = CGPoint(x: self.frame.size.width / 2,y: self.frame.size.height / 1.06)
ScoreLabelNode.zPosition = 100
ScoreLabelNode.text = String(score)
HighScore = 0
let defaults = NSUserDefaults.standardUserDefaults()
HighScore = defaults.integerForKey("highscore")
defaults.synchronize()
HighScoreLabel = SKLabelNode(fontNamed:"04b_19")
HighScoreLabel.fontSize = 30
HighScoreLabel.position = CGPoint(x: TransparentLayer.position.x, y: TransparentLayer.position.y)
HighScoreLabel.zPosition = 100
HighScoreLabel.text = String(format: "Best: %d", HighScore)
self.addChild(HighScoreLabel)
}
//Other coder
}
然后在调用presentScene
之前设置分数属性。
let scene = GameScene(size: self.frame.size)
scene?.scaleMode = SKSceneScaleMode.AspectFill
scene.lastScore = score // Set the score here
self.scene?.view?.presentScene(scene, transition: Transition)
我在 Swift 中使用 Sprite Kit 制作了一个简单的游戏。
Score 和 HighScore 定义为 NSInteger
。玩家点击 GameOver 后,场景会自行重启。
现在我想保存最后的乐谱并在新呈现的场景中显示。
我只有 1 个场景 (GameScene)。 我怎样才能访问最后的分数并每次都跟踪它?
我的代码:
override func didMoveToView(view: SKView) {
//Score System
Score = 0
ScoreLabelNode = SKLabelNode(fontNamed:"04b_19")
ScoreLabelNode.position = CGPoint(x: self.frame.size.width / 2,y: self.frame.size.height / 1.06)
ScoreLabelNode.zPosition = 100
ScoreLabelNode.text = String(Score)
HighScore = 0
let defaults = NSUserDefaults.standardUserDefaults()
HighScore = defaults.integerForKey("highscore")
defaults.synchronize()
HighScoreLabel = SKLabelNode(fontNamed:"04b_19")
HighScoreLabel.fontSize = 30
HighScoreLabel.position = CGPoint(x: TransparentLayer.position.x, y: TransparentLayer.position.y)
HighScoreLabel.zPosition = 100
HighScoreLabel.text = String(format: "Best: %d", HighScore)
self.addChild(HighScoreLabel)
}
func saveHighScore(){
//Update HighScore if currentScore is higher
HighScore = max(Score, HighScore)
//Store in user defaults
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setInteger(HighScore, forKey: "highscore")
NSUserDefaults.standardUserDefaults().synchronize()
}
func Restart(){
self.saveHighScore()
let Transition = SKTransition.fadeWithDuration(1.5)
let Scene = GameScene(size: self.frame.size)
scene?.scaleMode = SKSceneScaleMode.AspectFill
self.scene?.view?.presentScene(Scene, transition: Transition)
}
在 GameScene
中创建一个名为 lastScore
的 属性 并在显示新的 scene
之前设置它。
class GameScene {
var lastScore = 0
override func didMoveToView(view: SKView) {
Score = 0
ScoreLabelNode = SKLabelNode(fontNamed:"04b_19")
ScoreLabelNode.position = CGPoint(x: self.frame.size.width / 2,y: self.frame.size.height / 1.06)
ScoreLabelNode.zPosition = 100
ScoreLabelNode.text = String(score)
HighScore = 0
let defaults = NSUserDefaults.standardUserDefaults()
HighScore = defaults.integerForKey("highscore")
defaults.synchronize()
HighScoreLabel = SKLabelNode(fontNamed:"04b_19")
HighScoreLabel.fontSize = 30
HighScoreLabel.position = CGPoint(x: TransparentLayer.position.x, y: TransparentLayer.position.y)
HighScoreLabel.zPosition = 100
HighScoreLabel.text = String(format: "Best: %d", HighScore)
self.addChild(HighScoreLabel)
}
//Other coder
}
然后在调用presentScene
之前设置分数属性。
let scene = GameScene(size: self.frame.size)
scene?.scaleMode = SKSceneScaleMode.AspectFill
scene.lastScore = score // Set the score here
self.scene?.view?.presentScene(scene, transition: Transition)