Как представить SKScene из UIViewController - PullRequest
0 голосов
/ 12 февраля 2020

Я создаю эту игру в SpriteKit. При первом запуске GameViewController представляет другой ViewController, называемый MenuViewController, связанный с раскадровкой. А в MenuViewController есть кнопка воспроизведения, которая представляет сцену SKS, которая называется GameScene.

Я понял, как представить MenuViewController из GameViewController, но не могу найти способ представить 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 появиться. Ничего не происходит.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 18 февраля 2020

Думаю, я мог бы найти решение - я не представлял GameScene непосредственно из MenuViewController, но вместо этого, когда нажал playButton, я перешел к GameViewController и затем представил GameScene оттуда.

Я не знаю, почему это не работает в MenuViewController, но этот метод работает.

0 голосов
/ 23 марта 2020

В вашем классе GameViewController измените

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

на

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

0 голосов
/ 12 февраля 2020

Согласно документации 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

...