2014-11-23 2 views
0

У меня есть игра SpriteKit с двумя сценами. GameScene и PlayScene. Я перехожу между двумя сценами. Недавно Xcode попросил меня добавить этот код в мой GameScene, хотя мне он не нужен, прежде чем игра закончилась гладко.Как мне вернуться к GameScene в SpriteKit?

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

Xcode не жалуется, когда я пишу этот код для перехода к PlayScene от GameScene:

var scene = PlayScene(size: self.size) 
let skView = self.view as SKView! 
skView.ignoresSiblingOrder = true 
scene.scaleMode = .AspectFill 
scene.size = CGSizeMake(1536, 2048) 
skView.presentScene(scene) 

Однако, когда я использую этот почти идентичный код для перехода обратно к GameScene я получаю сообщение об ошибке:

var scene = GameScene(size: self.size) 
let skView = self.view as SKView! 
skView.ignoresSiblingOrder = true 
scene.scaleMode = .AspectFill 
scene.size = CGSizeMake(1536, 2048) 
skView.presentScene(scene) 

сообщение об ошибке: не удается преобразовать тип Выражение в '(размер: @lvalue CGSize)' для типа 'GameScene?

Я удалил required init? из GameScene, и ошибка исчезла, но затем Xcode дал мне еще одну ошибку, если я не положил required init? назад.

Раньше я был в состоянии запустить свою игру без required init?, но с другими кодовыми блоками.

Редактировать: Вот код конструктора GameScene.

//called in viewDidLoad() 
if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene { 
     let skView = self.view as SKView 
     scene.size = CGSizeMake(1536, 2048) 
     skView.showsFPS = true 
     skView.showsNodeCount = true 
     skView.ignoresSiblingOrder = true 
     scene.scaleMode = .AspectFill 
     skView.presentScene(scene) 
    } 
+0

Где находится код перехода? – jonogilmour

+0

В функции обновления 'if player.position.y <= -1000' вызывается переход. Я использую аналогичный вызов для обоих переходов. –

+0

Прежде всего, добавьте инициализатор обратно. Все, что вы делаете, это блокирование сообщения об ошибке, поставив перед ним еще одну ошибку. – jonogilmour

ответ

1

Самое забавное, что у меня была такая же проблема, как и вы. Это заняло у меня некоторое время, но я решил ее, добавив в GameScene:

override init(size: CGSize) { 
    super.init(size: size) 
} 

Дайте ему попробовать!

Смежные вопросы