一旦我的 SpriteKit 游戏结束,我想回到我的UIKit MenuViewController
。根据我到目前为止所学到的,使用协议/委托是最好的(?)选项,但我无法让它发挥作用。我知道该协议可能会高于类声明GameViewController
,看起来像:
protocol GameViewControllerDelegate {
var gameOver: Bool?
}
但我需要帮助才能访问它GameScene
并让它被解雇GameViewController
。以下是该应用程序的框架,以防有帮助。
菜单视图控制器
class MenuViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func goToGame(_ sender: UIButton) {
performSegue(withIdentifier: "toGameSegue", sender: sender.currentTitle)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destinationVC = segue.destination as? GameViewController {
if let item = sender as? String {
destinationVC.numberOfPlayers = item
}
}
}
}
游戏视图控制器
class GameViewController: UIViewController {
var numberOfPlayers: String?
override func viewDidLoad() {
super.viewDidLoad()
if let view = self.view as! SKView? {
if let scene = SKScene(fileNamed: "GameScene") {
scene.scaleMode = .aspectFill
scene.userData = NSMutableDictionary()
scene.userData?.setObject(numberOfPlayers!, forKey: "numberOfPlayers" as NSCopying)
view.presentScene(scene)
}
}
}
...
游戏场景
class GameScene: SKScene {
var howManyPlayers: String?
override func didMove(to view: SKView) {
if let numPlayers = self.userData?.value(forKey: "numberOfPlayers") {
howManyPlayers = numPlayers as? String
}
print(howManyPlayers!)
}
...
这个 SpriteKit 游戏有一个 MenuViewController、一个 GameViewController 和一个 GameScene。当您从 MenuViewController 按下按钮时,数据将通过 segue 发送到 GameViewController。在 GameViewController 呈现 GameScene 之前,它将数据存储在场景的 userData 变量中,以便 GameScene 可以访问它。在此示例中,它是玩家的数量。