dro*_*Fai 5 initialization sprite-kit swift swift3 xcode8
我正在尝试创建一个方便初始化程序来覆盖convenience init? (fileNamed:)SKScene中的初始化程序,以便我可以将一些初始值传递给场景,同时还取消归档.sks文件.问题是,当我尝试这样做时,似乎SKScene(GameScene)的子类无法看到convenience 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
}
Run Code Online (Sandbox Code Playgroud)
我发现的另一个尝试建议作为解决方法:
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
}
Run Code Online (Sandbox Code Playgroud)
调试器显示无限循环 GameScene.init(fileNamed : String) -> GameScene?
我该如何做到这一点?我需要继续我的生活!(和这个项目......)
难道就不能这么简单吗?
if let gameScene = GameScene(fileNamed: "GameScene") {
self.gameScene = gameScene
self.gameScene.stage = 1
self.gameScene.setupBasedOnStage()
self.gameScene.scaleMode = .aspectFill
self.gameScene.gameSceneDelegate = self.menuSceneDelegate as! GameSceneDelegate!
self.view?.presentScene(self.gameScene, transition: SKTransition.reveal(with: .down, duration: 1.0))
}
Run Code Online (Sandbox Code Playgroud)
您可以在显示页面之前设置舞台属性,如果需要,您可以调用设置函数来加载基于舞台的信息/图形。
我知道它不像你想做的那么优雅,但也许有时最简单的答案就是最好的?
| 归档时间: |
|
| 查看次数: |
1308 次 |
| 最近记录: |