0
votes

I made a simple Game in Swift with Sprite Kit.

Score and HighScore are defined as NSInteger. After the Player hits GameOver, the Scene restarts itself.

Now I want to save the last Score and to be shown in the new presented Scene.

I got only 1 Scene (GameScene). How can I access to the last Score and keep track of it every time?

My Code:

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)

}
1
Nothing is wrong in the code. I want to get the Last Score the Player made into the new shown Scene after GameOver along with the HighScore I made. - user3452594

1 Answers

0
votes

Make a property called lastScore in the GameScene and set it before presenting the new 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
}

Then set the score property before calling 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)