Выход
олько моя игра SpriteKit закончилась, я хотел бы вернуться кUIKit MenuViewController
, Из того, что я узнал до сих пор, используяПротокол / делегат это лучший (?) вариант, но я не смог заставить это работать. Я знаю, что протокол, вероятно, будет идти выше объявления класса дляGameViewController
и выглядеть примерно так:
protocol GameViewControllerDelegate {
var gameOver: Bool?
}
Но мне нужна помощь в получении доступа отGameScene
И заставить его уволитьGameViewController
, Ниже приведены кости приложения, на случай, если это поможет.
MenuViewController
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
}
}
}
}
GameViewController
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)
}
}
}
...
GameScene
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 мог получить к ней доступ. В этом примере это количество игроков.