ios - SpriteKit : Passing variable from GameViewController to GameScene

标签 ios sprite-kit segue

我在 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/

相关文章:

ios - UIButton 作为 subview 以编程方式约束

ios - 是否可以在没有继承的情况下覆盖类上的 drawRect?

ios - 优化 SKLabelNode 以减少性能问题

swift - 保存sknodes数组

ios - SpriteKit : One node with two physics body

ios - 有没有办法让 Controller 只在 iOS 中呈现(也许在 macOS 中也是如此)?

ios - Swift 中的条件转场

iphone - 如何在不产生新线程的情况下在iPhone上显示MBProgressHUD?

ios - 在 Core Data 中获取和更新,或者创建和删除 NSManagedObject?

ios - prepareForSegue 崩溃应用程序