[英]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.