Problema na subclasse SCNScene
Eu tenho tentado subclassificar SCNScene, pois esse parece ser o melhor lugar para manter minha lógica relacionada à cena. Agora não tenho certeza se isso é recomendado, então minha primeira pergunta é - Devo estar subclassificando o SCNScene e, se não, por que não?A documentação parece sugerir que é comum, mas eu li comentários on-line que sugerem que não devo subclassificá-la. Sucata que, eu estava olhando a documentação paraSKScene
. oSCNScene
referência de classe não faz menção a subclassificação.
Supondo que não há problema em estruturar meu jogo dessa maneira, aqui está o meu progresso
// GameScene.swift
import Foundation
import SceneKit
class GameScene: SCNScene {
lazy var enityManager: BREntityManager = {
return BREntityManager(scene: self)
}()
override init() {
print("GameScene init")
super.init()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
func someMethod() {
// Here's where I plan to setup the GameplayKit stuff
// for the scene
print("someMethod called")
}
}
Nota: estou usandolazy var
conforme a resposta paraessa questão
Na minha view controller, estou tentando usar o GameScene assim
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// create a new scene
let scene = GameScene(named: "art.scnassets/game.scn")!
// retrieve the SCNView
let scnView = self.view as! SCNView
// set the scene to the view
scnView.scene = scene
// Should print "someMethod called"
scene.someMethod()
}
}
No entanto, a chamada paraGameScene.someMethod()
desencadeia umEXEC_BAD_ACCESS
erro.
Além disso, se eu omitir a chamada paraGameScene.someMethod
, a cena carrega corretamente, mas o inicializador substituído emGameScene
não parece ser chamado.
Não tenho certeza do que está acontecendo aqui. É claro que há algo sobre subclasses no Swift que eu não entendi. Ou talvez haja algum aspecto da ordem em que as coisas sejam executadas que eu perdi.