しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

SpriteKitで「fatal error: use of unimplemented initializer 'init(size:)'」が起きた時の対処法

表題のエラーが出た時の対処法です。
下のようにSpriteKitで独自Sceneを定義してそれを呼び出した時に発生しました。

let scene = StartScene()

class StartScene: SKScene {
    override init() {
        super.init()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

スタックトレースを見たところ、親クラスのinitからinit(size: CGSize)を呼んでいました。

f:id:llcc:20170803125653p:plain

素直にinit(size: CGSize)を定義したら無事に動くようになりました。

let scene = StartScene()

class StartScene: SKScene {
    override init() {
        super.init()
    }
    
    override init(size: CGSize) {
        super.init(size: size)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

この時、init(size: CGSize)で渡されるサイズは1x1です。

f:id:llcc:20170803130109p:plain

Sceneを画面サイズに合わせたかったので、最終的に下のようにinit(size: CGSize)を使うようにしました。

let scene = StartScene(size: CGSize())

class StartScene: SKScene {
    override init(size: CGSize) {
        super.init(size: size)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}