在Swift中将动态Int变量从一个类传递到另一个类

时间:2015-11-27 12:33:54

标签: swift variables dynamic sprite-kit

是swift 2的新手,我在将一个变量从一个类传递到另一个类时遇到了困难。

我有一个课程" GameScene"在其中我有一个公共变量得分,它在更新功能中不断更新。我想在两个节点相互碰撞时发送得分值。一旦碰撞,我会使用" mainview .presentScene( gameoverScene )"进入另一个场景。句法。我想在gameoverscene中获得更新的分数。

我尝试使用" 私有让_gameScene = GameScene()"在gameoverscene中使用" finalscore.text = String(_gameScene.finalScore)"我获得的变量是我在开始时声明的O而不是更新的分数。请帮助我找到解决方案。

2 个答案:

答案 0 :(得分:3)

如果GameScene的{​​{1}}属性声明如下

score

然后从游戏的任何节点(已添加到主场景)中,您可以使用class GameScene: SKScene { var score = 0 } 属性检索场景。所以你可以做那样的事情。

scene

更新

通过您发表评论,我了解您希望在多个场景中共享class MyNode: SKNode { func foo() { guard let gameScene = self.scene as? GameScene else { fatalError("This node does not belong to a GameScene") } gameScene.score = 123 } } 值。有几种方法可以实现这一目标。如果是以下最简单的一个。

<强>保存

score

<强>读

NSUserDefaults.standardUserDefaults().setInteger(123, forKey: "score")
  

请注意,这种方式将值存储在持久存储中   当您重新启动应用程序时,该值仍然可用。

答案 1 :(得分:2)

我用NSUserDefaults来处理这个问题。 所以,在GameScene刚刚宣布类GameScene之后(而不是在任何函数中)我使用了

var score = Int()
var defaults = NSUserDefaults.standardUserDefaults()

然后在同一个班级的didMoveToView(view: SKView)函数中,我使用了

defaults.setInteger(0, forKey:"score")

因此,每当出现GameScene时,当前分数会在您开始游戏前重置为0。 然后在你的碰撞函数中,在即将出现GameOver场景之前(但仍然在GameScene类中),你使用(在你的分数增加或减少之后)

defaults.setInteger(score, forKey:"score")

这会将当前score设置为"score"中的密钥NSUserDefaults

最后,在GameOver场景中,在您出示分数之前,您可以说

let scoreFromGameScene = NSUserDefaults.standardUserDefaults().integerForKey("score")
label.text = "\(scoreFromGameScene)" //Or whatever you use to present the score

这将确保您获得GameScene的当前分数,以便您可以在GameOver场景中使用它。由于键"score"将始终具有某个整数值,因此我们可以无错误地检索该值。

希望有所帮助:)