【问题标题】:How to move from view controller to skscene如何从视图控制器移动到 skscene
【发布时间】:2018-02-24 12:29:07
【问题描述】:

我想用 swift 语言从UIViewController 呈现SKScene, 我正在 iOS 中开发游戏,菜单是 UIViewController 并且游戏在 SpriteKit 中,我需要在按下按钮后从菜单 (UIViewController) 移动到游戏 (SKScene)。 我该怎么做?

【问题讨论】:

  • 只需使用Xcode模板创建一个“游戏”,它会自动包含从UIGameViewController(UIViewController)到GamesScene(SKScene)的过渡
  • 我已经试过了,我有这个场景:首先我进入游戏(skscene)然后按钮移动到viewcontroller然后我想从控制器移动到另一个skscene
  • 你应该用一开始的所有信息来构建你的问题,而不是让人们不得不猜测你的场景。为什么要在 UIKit 中构建菜单?为什么不直接在 SpriteKit 中做呢?不管转换到第二个场景和转换到第一个场景的技术是一样的

标签: ios swift xcode sprite-kit


【解决方案1】:

就像@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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多