我一直在尝试将SCNScene作为子类,因为这似乎是保存场景相关逻辑的最佳位置。现在我不确定是否推荐这样做,我的第一个问题是 - 我应该将SCNScene作为子类吗?如果不是,为什么不是?文档似乎表明这很常见,但我在网上读到的评论表明我不应该将其作为子类。忽略那个,我看的是
假设这种方式来构建我的游戏是可以的,这是我的进展。
注意:根据这个问题的答案,我正在使用
在我的视图控制器中,我试图像这样使用GameScene。
然而,调用
另外,如果我省略对
我不确定这里发生了什么。很明显,我没有理解Swift中关于子类化的某些内容。或者我可能错过了事物应该运行的顺序的某些方面。
SKScene
的文档。 SCNScene
类参考没有提到继承。假设这种方式来构建我的游戏是可以的,这是我的进展。
// 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")
}
}
注意:根据这个问题的答案,我正在使用
lazy var
。在我的视图控制器中,我试图像这样使用GameScene。
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()
}
}
然而,调用
GameScene.someMethod()
会引发EXEC_BAD_ACCESS
错误。另外,如果我省略对
GameScene.someMethod
的调用,则场景可以正确加载,但是在GameScene
中覆盖的初始化程序似乎没有被调用。我不确定这里发生了什么。很明显,我没有理解Swift中关于子类化的某些内容。或者我可能错过了事物应该运行的顺序的某些方面。