Я пытаюсь создать инициализатор удобства, который переопределяет инициализатор convenience init? (fileNamed:)
в SKScene, чтобы я мог передать некоторые начальные значения в сцену, а также разархивировать. sks файл. Проблема в том, что когда я пытаюсь это сделать, кажется, что подкласс SKScene (GameScene) не может видеть convenience init? (fileNamed:)
суперкласса. Вот некоторые из моих попыток:Создание пользовательского инициализатора для SKScene, который переопределяет удобство init? (FileNamed :)
Class GameScene : SKScene {
var stage : Int?
override init(size: CGSize) {
super.init(size: size)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
convenience init?(fileNamed: String, stage: Int) {
self.init(fileNamed: fileNamed) // Compiler error-- Argument labels '(filenamed:)' do not match any available overloads
self.stage = stage
}
Еще одна попытка, я нашел предложил в качестве обходного пути:
Class GameScene : SKScene {
var stage : Int?
override init(size: CGSize) {
super.init(size: size)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
convenience init?(fileNamed: String) {
self.init(fileNamed: fileNamed) // Error at run time: EXC_BAD_ACCESS (code=2, address=0x16fc1bff0)
}
convenience init?(fileNamed: String, stage: Int) {
self.init(fileNamed: fileNamed)
self.stage = stage
}
Отладчик показывает бесконечный цикл GameScene.init(fileNamed : String) -> GameScene?
Как это сделать? Мне нужно продолжать свою жизнь! (и этот проект ...)
Точка взята! Это делает работу. Спасибо за то, что он голос прагматизма. Тем не менее, я хотел бы знать, почему я не могу успешно переопределить удобство init в SKScene ... – drockFai
Кстати, что такое тип GameSceneDelegate? Я никогда не использовал это. – drockFai
oops, не должен был включать это в мой пример ... Я создаю своих собственных делегатов на своих сценах, и я делаю GameViewController соответствующими этим делегатам. Таким образом, если мне нужно, чтобы GameViewController что-то делал (отображать таблицы лидеров, скриншоты, диалог контактов/почты и т. Д.), Я просто вызываю gameSceneDelegate.showLeaderboards(), чтобы найти GameViewController, помещая его в переменную, а затем вызывает функцию –