Swift SKSpriteNodeの継承

以前にクラスを初期化してみたら早速壁にぶつかっただいだいですが、今回はもう1歩踏み出し、継承してみました。

 

SKSpriteNodeの継承

まずは赴くまま、Objective-Cライクに下記のように表記したら安定のエラーでした。

 

import SpriteKit

import Foundation

import UIKit

 

class ButtonNode : SKSpriteNode{

    

    var _NormalTexture:SKTexture? //通常時のボタン

    var _PushedTexture:SKTexture? //押下時のボタン

    var _IsContinuePush:Bool      //押し込み式ボタンフラグ(一度押下すると次に押下されるまで押下時画像が表示される)

    var _IsPushed:Bool            //押し込み式の場合のみ使用 現在押されているかどうかのフラグ

 

//----------------------------------------------

//

// 初期化

//

//----------------------------------------------

    init(){

        super.init(){

        }

        _IsContinuePush = false

        _IsPushed = false

    }

    

}

 

エラー文

Cannot invoke 'SKSpriteNode.init' with an argument list of type '*1'

'required' initializer 'init(coder:)' must be provided by subclass of 'SKSpriteNode'

 

親クラスの初期化関係とrequired initializerというものが関係していそ、か?と思って調べてみると、子クラスにイニシャライザのオーバーライドを強制させたいときはrequired修飾子を使うということでしたが詳細はわかりませんがいれときます!あとは、SKSpriteNodeに準備されているイニシャライザの引数に合わせるようにして呼び出すとエラーは消えました。下記はとりあえず意味のない引数を入れてエラーをなくした状態です。

 

import SpriteKit

import Foundation

import UIKit

 

class ButtonNode : SKSpriteNode{

    

    var _NormalTexture:SKTexture? //通常時のボタン

    var _PushedTexture:SKTexture? //押下時のボタン

    var _IsContinuePush:Bool      //押し込み式ボタンフラグ(一度押下すると次に押下されるまで押下時画像が表示される)

    var _IsPushed:Bool            //押し込み式の場合のみ使用 現在押されているかどうかのフラグ

 

//----------------------------------------------

//

// 初期化

//

//----------------------------------------------

    init(){

        _IsContinuePush = false

        _IsPushed = false

        let texture = SKTexture(imageNamed: "test")

        let col = SKColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)

        super.init(texture: texture, color: col, size: texture.size())

    }

    

    required init?(coder aDecoder: NSCoder) {

        fatalError("init(coder:) has not been implemented")

    }

    

}

 

 親クラスであるSKSpriteNodeはimageNamedのイニシャライザをもっていないのか。。。とりあえずcolorとか入れてしのいでます。

*1:) -> (