ゲーム開発日誌part11  敵の攻撃パターンの実装方法

前回のエントリーに引き続き、敵(ボス)の攻撃について色々考えています。実装自体はそんなに難しくはないのですが、画像を作成する時間がかなりかかりますので余り進んでいません。プレイヤーを飽きさせないためにも、色々な攻撃パターンがあればゲームは面白くなると思います。

複数のスプライトを使った攻撃

複数のスプライトを使えば、一つのモノよりも派手な攻撃パターンを実装すことができます。

今回考えている攻撃パターンは2種類。

青い火で攻撃

ボスが消えている間に、マップに青い火が出てきて、これにPlayerが触れるとダメージを受けます。 青い火を表すクラスを用意して、for文を使ってマップに配置します。

まだ完成ではないですが、spriteの生成やフェードイン、フェードアウトのタイミングが難しいです。 スクリーンショット 2012 05 11 11 58 43

手で攻撃

今までは同じspriteで、敵の全てを表示していましたが、今回は試しに、体の部分ごとにクラスを分けました。 本体クラスに、手のクラスをaddChildで追加しています。

本体 GhostBoss move003

GhostBoss lefthand001

実際の攻撃はCCActionを使っています。 現在は、CCMoveByクラスで実装しているのですが、直線的な所が気になりますのでこの辺は調整が必要です。 また、Playerを狙って攻撃できるようにしたいです。

スクリーンショット 2012 05 11 12 03 52

動画

CCActionを使った攻撃パターン

CCActionに属する色々なクラスを組み合わせて、攻撃パターンを作っていきます。

今回は、鳥が両側を挟んで、行ったり来たりして攻撃をしてきます。 その間、鳥に触れるとダメージを受けます。 スクリーンショット 2012 05 11 11 31 07

これに関しては、細かく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]

動画

最後に

現在は敵についてやっていますが、イベントと音楽がまだ全然考えられていないのでこの辺も並行してやっていかなくてはいけません。実際に作っているとわかるのですが、すでに市場に出ているゲームは本当に手間をかけて作られているのだと感じます。ゲーム開発をしている人は本当に凄いな。