自キャラの出し分け

kobold2dのサンプルに入っていたParallax-Side-Scrollerを改造して自分のゲームにしている件です。
前回、背景画像をスプライトシートから設置しました
今回は、表示する自キャラに基地を追加します。

まず、元々のEnemyCache.mやEnemyEntity.mを直接修正してしまったので、修正前のファイルを開いて内容を確認します。

EnemyCache.mのinitBasesでは、switchのcaseを増やします。


同じく、EnemyEntity.mのinitWithTypeでもswitchのcaseを増やします。

実は、少し前に基地の画像をスプライトシートに入れていました。その名前を追加しただけです。

あと、EnemyEntity.hのtypeof enumでbaseを追加します。


忘れちゃいけないのは基地の設置座標です。

配列に加えました。
これでRunしてみると、、、

130522 0002
都市と基地が被ってしまいました。

それもそのはずです。BaseCache.mのinitBasesで設置の2重forを回していたので、baseIDの数値jは4回でリセットされてしまいます。

jが通しで8になると勘違いしてました。

仕方が無いので、座標の配列を2つにします。
この時、本当は少し悩みました。都市と基地を各Entityクラスで分けてbaseCacheクラスから呼び分けすれば、もっとスマートに管理できるのではないんじゃないかと。。。
でも、自分が今持っているスキルでスグに解決できる方法で進めることにしました。

座標の配列を分けたので、今のやり方だとBaseEntity.mのspawnメソッドで自キャラの判別を行う必要があります。

spawnメソッドの引数を増やしてbaseTypeを受け取れるようにしました。また、switchで参照する配列を変更しています。

同じBaseEntity.mのinitWithTypeでspawnをコールする時も引数としてbaseTypeを与えるように変更します。

少し躓いたのが、BaseEntity,hでspawnの宣言にも引数を加え忘れていたことです。これをしないと、Incomplete Implementationの警告が出ます。

130522 0003
これで期待通りの配置になりました。
ただ、自キャラが敵キャラの上に重なってレイヤー順がイマイチです。

GameLayer.mのinitメソッドで、敵キャラと自キャラのレイヤー順を変えておきました。

130522 0005
これでバッチリです。
次は、敵キャラを自キャラへ誘導したいと思います。