【问题标题】:How do I transfer the user's score to another scene in Swift and SpriteKit?如何将用户的分数转移到 Swift 和 SpriteKit 中的另一个场景?
【发布时间】:2016-03-30 01:28:03
【问题描述】:

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

【问题讨论】:

  • @JoshSchalbach 展示你迄今为止尝试过的东西总是一个好主意:) 大多数反对意见来自这样一个事实,即问题缺乏必需的信息,或者看起来像原始海报要求完整的解决方案甚至没有尝试自己解决问题:)

标签: swift sprite-kit


【解决方案1】:

您可以使用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 场景中创建一个公共属性(分数),并在过渡时使用当前分数设置该属性(来自 Gameplay 场景)。

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

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

编辑:

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

【讨论】:

  • 非常感谢。那是我玩游戏的最后一件事!现在开始上传到应用商店:)
【解决方案2】:

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

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

那么你就可以这样使用它:

let score = Global.score;

Global.score += 10;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-11
    • 2016-11-05
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多