本文介绍了SpriteKit:将变量从GameView控制器传递到GameScene的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在故事板中创建了一个菜单,它通过段将一些信息传递给GameView控制器。理想情况下,我可以使用该段将信息直接传递到我需要的位置,但我不确定这是不是一个选项,因为场景只是一个视图,而不是一个视图控制器。因此,我将信息传递给了GameView控制器,这很好用。但现在,我怎么才能把它传到GameScene.swft上呢?
从菜单分段到GameView控制器
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
}
}
}
GameView控制器
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的istance属性,您可以使用此词典在呈现场景之前存储您想要的任何内容(此示例来自Hello WorldSprite-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)")
}
...
这篇关于SpriteKit:将变量从GameView控制器传递到GameScene的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!