前回のエントリーに引き続き、敵(ボス)の攻撃について色々考えています。実装自体はそんなに難しくはないのですが、画像を作成する時間がかなりかかりますので余り進んでいません。プレイヤーを飽きさせないためにも、色々な攻撃パターンがあればゲームは面白くなると思います。
複数のスプライトを使った攻撃
複数のスプライトを使えば、一つのモノよりも派手な攻撃パターンを実装すことができます。
今回考えている攻撃パターンは2種類。
青い火で攻撃
ボスが消えている間に、マップに青い火が出てきて、これにPlayerが触れるとダメージを受けます。 青い火を表すクラスを用意して、for文を使ってマップに配置します。
まだ完成ではないですが、spriteの生成やフェードイン、フェードアウトのタイミングが難しいです。
手で攻撃
今までは同じspriteで、敵の全てを表示していましたが、今回は試しに、体の部分ごとにクラスを分けました。 本体クラスに、手のクラスをaddChildで追加しています。
実際の攻撃はCCActionを使っています。 現在は、CCMoveByクラスで実装しているのですが、直線的な所が気になりますのでこの辺は調整が必要です。 また、Playerを狙って攻撃できるようにしたいです。
動画
CCActionを使った攻撃パターン
CCActionに属する色々なクラスを組み合わせて、攻撃パターンを作っていきます。
今回は、鳥が両側を挟んで、行ったり来たりして攻撃をしてきます。 その間、鳥に触れるとダメージを受けます。
これに関しては、細かくCCActionを設定して、最後にrunActionでスプライトを動かしています。 CCActionクラスの中で、スプライトを移動させるクラスはCCMoveTo(CCMoveBy)とCCJumpTo(CCJumpBy)のそれぞれのクラスを使います。 今回は、弧を描いて移動したいのでCCJumpByクラスを使いました。 [c]
CGSize winSize = [CCDirector sharedDirector].winSize;
id attack = [CCJumpBy actionWithDuration:1.5f position:ccp(winSize.width-50,-50) height:-100 jumps:1];
[/c]
当たり判定では、CGRectIntersectsRectをupdate内で利用してます。 [c] //お互いのCGRectが重なるかどうかを判定 if (CGRectIntersectsRect(selfRect, PlayerRect)) {
//重なったときの処理
[Player hitAction];
} [/c]
動画
最後に
現在は敵についてやっていますが、イベントと音楽がまだ全然考えられていないのでこの辺も並行してやっていかなくてはいけません。実際に作っているとわかるのですが、すでに市場に出ているゲームは本当に手間をかけて作られているのだと感じます。ゲーム開発をしている人は本当に凄いな。