Sprite Kit 最后得分数据

Posted

技术标签:

【中文标题】Sprite Kit 最后得分数据【英文标题】:Sprite Kit Last Score Data 【发布时间】:2015-03-04 16:52:11 【问题描述】:

我使用 Sprite Kit 在 Swift 中制作了一个简单的游戏。

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)


【问题讨论】:

代码没有问题。我想在 GameOver 之后获得玩家在新显示场景中的最后得分以及我制作的 HighScore。 【参考方案1】:

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)

【讨论】:

非常感谢您的建议并花时间帮助我!虽然此代码适用于不同的场景,但我认为它不适用于我的案例。在我的GameOver 中,呈现的场景就是它本身(我只有 1 个场景,没有 GameOver 场景)。 如果是同一个场景。您可以在游戏场景类中创建一个属性并在呈现新游戏场景之前对其进行设置。 是的,但是场景再次呈现后,Score的值又会被设置为0。对不起,我好像没明白你的意思。你能澄清一下吗? 非常感谢!它奏效了,我可以将此作为我其他价值观的示例。

以上是关于Sprite Kit 最后得分数据的主要内容,如果未能解决你的问题,请参考以下文章

Sprite Kit - 使用 Switch Case 将随机 Sprite 节点添加到场景中

Sprite Kit SKShapeNode 创建两个节点而不是一个

Sprite kit:删除特定节点而不是所有节点

如何在 sprite kit 中引用多个同名的 sprite?

Sprite Kit,删除 Sprite 以进行碰撞

Sprite Kit 场景未呈现