如何从 UIViewController 呈现 SKScene

How To Present a SKScene from a UIViewController

我正在用 SpriteKit 创建这个游戏。 首次启动时,GameViewController 会显示另一个名为 MenuViewController 的 ViewController,并与故事板链接。 在 MenuViewController 中有一个播放按钮,它将呈现一个名为 GameScene 的 SKScene。

我想出了如何从 GameViewController 显示 MenuViewController,但我找不到在点击播放按钮时显示 GameScene 的方法。 在我的代码中,当点击按钮时,实际上什么也没有发生。

GameViewController:

import UIKit
import SpriteKit

class GameViewController: UIViewController {

    override func viewDidAppear(_ animated: Bool) {

        let storyBoard: UIStoryboard = UIStoryboard(name: "MenuViewController", bundle: nil)
        let vc = storyBoard.instantiateViewController(withIdentifier: "MenuViewController") as! MenuViewController
        self.present(vc, animated: true, completion: nil)

    }

} 

并且在 MenuViewController:

import UIKit
import SpriteKit

class MenuViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    @IBAction func playButtonTapped(_ sender: Any) {

         if let view = self.view as! SKView? {
            let scene = GameScene(size: view.bounds.size)
            scene.scaleMode = .aspectFill 
            view.presentScene(scene)
            view.ignoresSiblingOrder = true
            view.showsFPS = false
            view.showsNodeCount = false
            view.showsPhysics = false

         }
    }

}

另外,我在控制台中打印了这个警告:

SKView: ignoreRenderSyncInLayoutSubviews is NO. Call _renderSynchronouslyForTime without handler

不知道有没有关系...

我确实将 MenuViewController 的故事板的视图设置为与 SKView 相同。 我找不到任何方法让 GameScene 出现。没有任何反应。

谢谢!

根据 Apple 开发文档,'scene' 需要为 'view' 出示。 试试这个。 :)

@IBAction func playButtonTapped(_ sender: Any) {

     if let view = self.view as? SKView {
        let scene = GameScene(size: view.bounds.size)
        scene.scaleMode = .aspectFill
        view.ignoresSiblingOrder = true
        view.showsFPS = false
        view.showsNodeCount = false
        view.showsPhysics = false

        // Add this code
        view.presentScene(scene)
     }
}

https://developer.apple.com/documentation/spritekit/skview/1519705-presentscene

我想我可能已经找到了解决方案——我没有直接从 MenuViewController 显示 GameScene,而是在按下 playButton 时转换到GameViewController 然后从那里呈现 GameScene

我不知道为什么它在 MenuViewController 中不起作用,但这种方法有效。

在你的GameViewController中class改变

if let scene = SKScene(fileNamed: "GameScene")

if let scene = GameScene(fileNamed: "GameScene")