如何从 Swift SpriteKit 中的另一个 SKScene 访问变量
Posted
技术标签:
【中文标题】如何从 Swift SpriteKit 中的另一个 SKScene 访问变量【英文标题】:How to access variables from another SKScene in Swift SpriteKit 【发布时间】:2015-07-06 00:57:09 【问题描述】:我在访问其他类的变量时遇到了问题。这是我的代码。 这是我试图访问变量“lastSelection”的类它也是第一个调用查看的SKScene。
class FighterPlaneselect : SKScene
var lastSelection:String = ""
override func didMoveToView(view: SKView)
if(true)
lastSelection = "Mustang"
//Here is the second class called "GameField"
class GameField : SKScene
var FighterPlane : FighterPlaneSelect!
override func didMoveToView(view: SKView)
FighterPlane = FighterPlaneSelect()
print(FighterPlane.lastSelection)
每当它打印出来时,它都会打印“”。它应该打印“Mustang”。
【问题讨论】:
【参考方案1】:在这一行:
FighterPlane = FighterPlaneSelect()
您实例化该类的新 SKScene。问题是,它从未显示,因此方法:func didMoveToView(view: SKView)
从未被调用。
你需要的是对另一个场景的引用。
一种可能性是执行以下操作:
class FighterPlaneSelect : SKScene
var lastSelection:String = ""
override func didMoveToView(view: SKView)
if(true)
lastSelection = "Mustang"
//Here is the second class called "GameField"
class GameField : SKScene
var fighterPlane : FighterPlaneSelect!
override func didMoveToView(view: SKView)
print(FighterPlane.lastSelection)
//Here is in the GameScene
let fighterPlaneSelect = FighterPlaneSelect
//show the scene to make it move to view
//then assign the variable inside the gameField object
let gameField = GameField()
gameField.fighterPlane = fighterPlaneSelect
【讨论】:
首先调用 FighterPlaneSelect 视图,然后调用 GameField 视图 它们是从哪个类调用的? 这实际上不是我的完整代码,因为我不想把它放出来。 FighterPlaneSelect 类是第一个视图。它被称为 GameScene,但我想出了如何更改它。所以它是默认视图 如果没有实际代码,我无能为力。也就是说,由于您的 GameScene 对象包含对 fighterPlaneSelect 实例化对象的引用,因此它可以将其传递给任何人。如果您从您的 GameScene 实例化您的 gameField,那么您可以执行我在修改后的答案中发布的内容。本质上,您实例化了您的 GameField 对象,该对象包含一个类型为 FighterPlaneSelect 的变量,该变量为 nil。然后将该对象传递给实例化的 FighterPlaneSelect 对象的引用。希望这是有道理的..【参考方案2】:您可以在场景的 init 方法中初始化该变量:
class FighterPlaneselect : SKScene
var lastSelection:String = ""
override init(size: CGSize)
super.init(size: size)
lastSelection = "Mustang"
required init?(coder aDecoder: NSCoder)
fatalError("init(coder:) has not been implemented")
override func didMoveToView(view: SKView)
然后像以前一样使用它:
class GameField : SKScene
var FighterPlane : FighterPlaneselect!
override func didMoveToView(view: SKView)
FighterPlane = FighterPlaneselect(size: self.size)
println(FighterPlane.lastSelection)
【讨论】:
【参考方案3】:非常简单!只需在类外声明 lastSelection !
class FighterPlaneselect : SKScene
var lastSelection:String = "" //Declared in the class
var lastSelection:String = "" //Declared outside the class
class FighterPlaneselect : SKScene
【讨论】:
以上是关于如何从 Swift SpriteKit 中的另一个 SKScene 访问变量的主要内容,如果未能解决你的问题,请参考以下文章
Swift,SpriteKit:释放游戏场景并重新分配新场景
如何将数据从 Playground 页面传递到 Swift Playgrounds 中的另一个 Playground 页面?
如何使用 Swift 正确切换 SpriteKit 中的 SKScene?