本文介绍了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()
...

推荐答案

由于其他SKNodeSKScene都有一个名为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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-21 09:12