swift – 为SKScene创建一个自定义的initalizer,它会覆盖方便的i
发布时间:2020-12-14 04:43:01 所属栏目:百科 来源:网络整理
导读:我正在尝试创建一个方便初始化程序来覆盖方便初始化? SKScene中的(fileNamed :)初始化程序,以便我可以将一些初始值传递给场景,同时取消归档.sks文件.问题是,当我尝试这样做时,似乎SKScene(GameScene)的子类无法看到方便的init?超类的(fileNamed :).以下是
我正在尝试创建一个方便初始化程序来覆盖方便初始化? SKScene中的(fileNamed :)初始化程序,以便我可以将一些初始值传递给场景,同时取消归档.sks文件.问题是,当我尝试这样做时,似乎SKScene(GameScene)的子类无法看到方便的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? 我该如何做到这一点?我需要继续我的生活! (和这个项目……) 解决方法
难道不是这么简单吗?
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)) } 您可以在显示页面之前设置舞台属性,如果需要,可以调用设置功能以根据舞台加载信息/图形. 我知道它并不像你想做的那样优雅,但也许有时最简单的答案是最好的? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |