是swift 2的新手,我在将一个变量从一个类传递到另一个类时遇到了困难。
我有一个课程" GameScene"在其中我有一个公共变量得分,它在更新功能中不断更新。我想在两个节点相互碰撞时发送得分值。一旦碰撞,我会使用" mainview .presentScene( gameoverScene )"进入另一个场景。句法。我想在gameoverscene中获得更新的分数。
我尝试使用" 私有让_gameScene = GameScene()"在gameoverscene中使用" finalscore.text = String(_gameScene.finalScore)"我获得的变量是我在开始时声明的O而不是更新的分数。请帮助我找到解决方案。
答案 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"
将始终具有某个整数值,因此我们可以无错误地检索该值。
希望有所帮助:)