繁体   English   中英

如何从 UIViewController 呈现 SKScene

[英]How To Present a SKScene from a UIViewController

我正在 SpriteKit 中创建这个游戏。 首次启动时, GameViewController呈现另一个名为MenuViewController ViewController,该 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 Devlopment 文档,“场景”需要呈现以供“查看”。 尝试这个。 :)

@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 类更改

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM