我在 Storyboard 中创建了一个菜单,它通过 segue 将一些信息传递给 GameViewController。理想情况下,我可以使用该 segue 将信息直接传递到我需要的 GameScene.swift,但我不确定这是一个选项,因为场景只是一个 View 而不是 View Controller 。因此,我将信息传递给 GameViewController,效果很好。但是现在,我如何将它发送到 GameScene.swift?
从菜单转到 GameViewController
func passToGame(game: String) {
performSegue(withIdentifier: "toGameSegue", sender: game)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destinationVC = segue.destination as? GameViewController {
if let item = sender as? String {
destinationVC.gameInfo = item
}
}
}
游戏 View Controller
class GameViewController: UIViewController {
var gameInfo: String? //This works great - now how do I get it to GameScene.swift?
override func viewDidLoad() {
super.viewDidLoad()
...
最佳答案
与其他 SKNode
一样,SKScene
有一个名为 userData 的实例属性,你可以使用这个字典来存储你想要的任何东西来呈现场景(这个例子来自“Hello World”Sprite-kit 模板):
class GameViewController: UIViewController {
var gameInfo: String?
override func viewDidLoad() {
super.viewDidLoad()
if let view = self.view as! SKView? {
// Load the SKScene from 'GameScene.sks'
if let scene = SKScene(fileNamed: "GameScene") {
// Set the scale mode to scale to fit the window
scene.scaleMode = .aspectFill
// Present the scene
scene.userData = NSMutableDictionary()
scene.userData?.setObject(gameInfo ?? "", forKey: "gameInfo" as NSCopying)
view.presentScene(scene)
}
...
要从 GameScene
中检索值,您只需执行以下操作:
override func didMove(to view: SKView) {
if let gameInfo = self.userData?.value(forKey: "gameInfo") {
print("gameInfo is :\(gameInfo)")
}
...
关于ios - SpriteKit : Passing variable from GameViewController to GameScene,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43239709/