寝ている人の寝言

日常の事や、やっているゲーム、読んでいる小説や漫画の感想などを徒然なるままに書いていくブログです。たまに勉強したことのメモとかも書くかもしれません。

SKSpriteNodeを継承しようとしたら...?

 どうもねいとです。

 最近は「カコ☆タマ」 というゲームアプリをやっています。

 キャラも可愛いので暇つぶしにちょうどいいです。

 

 まぁ話は変わって、最近SpriteKitを使ってSwiftの学習をしていたのですが、いざゲームを作ろうとすると、SKSpriteNodeを直に使うのは少々効率や見た目が悪くなりそうだと思いまして…。

 なら継承クラス作るかーという流れになり継承しようとしたら、エラーが大量発生。

 

 ここで一旦頭がフリーズ。

 

 フリーズから戻って来てとりあえずなんでだ?と考えつつ、Googleで「SKSpriteNode 継承」みたいに調べた所、見つかってぱっと参考になりそうだったのが1サイトだけ。

 そこを参考に継承クラスを作ってみたらすんなりとできた。

 

 さて、なんでだろうと考えた所、答えはすぐにでました。

 単純に僕のSwiftのClassに対しての知識が弱かった。

 

 SKSpriteNodeだからエラーがでたのではなく、単純に継承の仕方を間違えていたというか、少々勘違いしたというか…。

 

 githubなどという高尚なものに登録していないのでソース直書きになるので申し訳ないですが、勘違いしていた部分を書くと。

 

// 基底クラスCHoge

class CHoge {
    var m_name: String    // 名前
    var m_level: Int           // レベル
    // イニシャライザ
    init(name: String, level: Int = 1) {
        self.name = name
        self.level = level
    }
}

 

// 継承クラスCFuga

class CFuga: CHoge {
    var m_hp: Int?        // 新規メンバ変数 m_hp
    // イニシャライザ
    init(level: Int = 1) {
        super.init(name: "スライム", level: level)  // 継承元イニシャライザ呼び出し
        self.m_hp = 10    // m_hpの数値を設定
    }
}

 

 最初、m_hpをInt? ではなく Int で型指定していて、なぜか知らないけれど数値設定をしていなくて、super.init() の部分でエラーがでる。

 Int? にするか、Int = 5 みたいに数値を設定しておけばエラーはでなかった。

 Int?の場合は、数値の設定を init() 内で数値を設定しなくてもエラーはでない。

 

 まぁここでちょっとはまってたみたいです恥ずかしい。

 というより、Int の所でエラーが出るのではなく、super.init() の方でエラーがでたから混乱したのだと思います。

 

 とりあえずSKSpriteNodeの継承クラスはなんとなく作れたので、これで少しはこれで少しはオブジェクトを増やしやすくなったかな?

 

 それでは。