如何将用户的分数转移到Swift和SpriteKit中的另一个场景?

时间:2015-11-10 23:03:47

标签: swift sprite-kit

我有三个场景,一个MainMenu场景,一个GamePlay场景和一个GameOver场景。用户在游戏场景中获得其得分,并且我想将该得分转移到GameOver场景。我怎样才能做到这一点? (如果您需要我的代码或更多信息,请询问!)

2 个答案:

答案 0 :(得分:2)

您可以使用NSUserDefaults类作为最简单的解决方案......

在您的GameplayScene中,您将分数设置为持久存储。

let defaults = NSUserDefaults.standardUserDefaults()
defaults.setInteger(score, forKey: "scoreKey")

defaults.synchronize()

稍后在GameOver场景中,你会读到这样的持久存储:

let defaults = NSUserDefaults.standardUserDefaults()
let score = defaults.integerForKey("scoreKey")
println(score)

关于synchronize()方法(来自文档):

  

因为此方法会定期自动调用,   只有在您不能等待自动时才使用此方法   同步(例如,如果您的应用程序即将退出)或   如果要将用户默认值更新为磁盘上的内容,即使如此   你没有做任何改变。

或者我猜你可以在GameOver场景上制作公共财产(得分),转换时,用当前得分设置该属性(来自游戏场景)。

同样,您可以将值设置为每个节点都具有的userData属性,如下所示:

 newScene.userData?.setValue(score, forKey: "scoreKey")

修改

如果您对持久性感兴趣(在应用程序启动之间提供值),NSUserDefaults将是首选方式。否则,您可以在他的示例中使用userData或KnightOfDragon指向的结构。

答案 1 :(得分:2)

NSUserDefaults的替代方案是创建一个容纳所有全局数据的结构

struct GlobalData
{
  static var gold = 0;
  static var coins = 0;
  static var lives = 0;
}

然后你会像这样使用它:

let score = Global.score;

Global.score += 10;