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:) -> (