Creating a custom initializer for SKScene that overrides the convenience of init? (FileNamed :)

I am trying to create a convenience initializer that overrides the initializer convenience init? (fileNamed:)in SKScene so that I can pass some initial values ​​to the scene as well as unzip the .sks file. The problem is that when I try to do this, it seems that a subclass of SKScene (GameScene) cannot see the convenience init? (fileNamed:)superclass. Here are some of my attempts:

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
}

Another attempt I found suggested as a workaround:

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
}

The debugger shows an infinite loop. GameScene.init(fileNamed : String) -> GameScene?

How to do it? I need to continue my life! (and this project ...)

+4
2

?

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))
    }

, , , / .

, , , , , , - ?

+3

Swift :

1: .

2: .

3: .

public convenience init?(fileNamed filename: String) SKNode, 2.

Xcode, , , required init?(coder aDecoder: NSCoder), 3.

+3

Source: https://habr.com/ru/post/1669614/


All Articles