我正在SpriteKit中创建此游戏。
在第一次启动时,GameViewController
会提供另一个称为Storyboard的ViewController,称为MenuViewController
。
在MenuViewController
中有一个播放按钮,将显示一个名为GameScene
的SKScene。
我想出了如何从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
出现的方法。什么都没发生。谢谢!
最佳答案
根据Apple开发文档,需要为“视图”显示“场景”。
尝试这个。 :)
@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
关于ios - 如何从UIViewController呈现SKScene,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60180906/