Итак, у меня есть SKView
как IBOutlet
и делегат, который позволяет сценам изменять текущую сцену следующим образом:
// this code is inside the view controller
func changeScene(to sceneType: GameScene.Type) {
let sceneName = NSStringFromClass(sceneType).components(separatedBy: ".").last!
let scene = sceneType.init(fileNamed: sceneName)!
scene.scaleMode = .aspectFill
scene.dialogueDelegate = self.dialogueView
scene.sceneDelegate = self
self.hudScene.hudDelegate = scene
self.actionButtonScene.actionButtonDelegate = scene
self.gameView.presentScene(scene, transition: SKTransition.fade(withDuration: 2))
}
Я вызываю эту функцию один раз, когда игра начинается (и это работает) и один раз, когда игрок выпадает из сцены:
// this code is inside the scene
override func update(_ currentTime: TimeInterval) {
if self.player.position.y < -self.size.height / 2 {
self.player.removeFromParent()
self.sceneDelegate?.changeScene(to: Self.self)
}
}
Но второй раз это ничего не делает. Код выполняется, но сцена не представлена. Удаление SKTransition
, кажется, решает проблему, но почему проблема перехода здесь?