如何从视图控制器移动到skscene

时间:2018-02-24 12:29:07

标签: ios swift xcode sprite-kit

我想以快速语言呈现SKScene中的UIViewController, 我在iOS中开发游戏,菜单是UIViewController,游戏在SpriteKit中,我需要从菜单(UIViewController)移动到游戏(SKScene)按下按钮。 我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

喜欢@Ron Myschuk说你应该考虑将你的菜单移到SpriteKit。如果您想使用UIKit,则需要将SKSceneUIViewController进行通信(我猜这是您的问题)。

您可以使用delegate pattern实现此目的。

使用此模式,您的代码可能如下所示:

/// Game actions that should be notified.
Protocol GameSceneDelegate: class {
    func gameDidEnd()
}

public class GameScene: SKScene {

    weak var gameDelegate: GameSceneDelegate?

    // MARK: - Menu Actions
    func userDidPressMenuButton() {
        ///Do what you want to do..
    }
}

class GameViewController: UIViewController, GameSceneDelegate{

    var scene: GameScene?

    override func viewDidLoad() {

        if (self.view as! SKView?) != nil {
            self.scene = GameScene(fileNamed: "GameScene")
        }

        self.scene?.gameDelegate = self
    }

    // MARK: - GameSceneDelegate methods

    func gameDidEnd(){
        ///Do what you want to do..
    }

    // MARK: - Actions
    @IBAction func pressMenuButtonAction(_ sender: Any) {

        self.scene?.userDidPressMenuButton()
    }
}

当您在UIViewController按下按钮时,您可以致电SKScene以执行其需要执行的操作。当场景需要告诉菜单一个相关的动作(比如游戏结束)时,它会调用它的代理人,即你的UIViewController