ゲーム開発日誌part10 戦闘の際のエフェクト

先月末に引き続き、GW中はcocos2dでボスの作成をしています。そのなかで、戦闘を派手にするために「エフェクト」をどうするかに四苦八苦して結構時間を取られます。この部分がゲームバランスの問題にも関わってくると思います。

ビーム

「ビーム」でやりたい動き。

ビームを出す

ビームを表現するのに凄く悩んで試行錯誤した結果。一つのスプライトを珠珠つなぎに生成してビームのように見せるのがいいのではないかと思いました。

このスプライトを使っています。 BeamBoss

壁に跳ね返る

これも凄く悩みました。 できたものは凄く単純なんですが、画面のサイズにビームのテクスチャが接触したら、移動で使っているCGPointクラスのxやyに「−1」を乗算していあげれば跳ね返って見えます。

当たったらダメージを受ける

これはビームのテクスチャを表現するビームクラスに以下のような当たり判定を設置します。 [c] //当たり判定 if (CGRectIntersectsRect(selfRect,playerRect)) { //Playerがダメージを受けるメソッドを呼び出す。 [Player hitAction];

[/c]

まだ完全が必要な感じはしますが、ビームのように見えます。 スクリーンショット 2012 05 08 21 33 59

炎の壁

「炎の壁」でやりたい動き。

炎のように見えるアニメーションを施す

これは、一つクラスを準備して、その中でCCActionを使ってアニメーションさせる。 こんな感じのアニメーションです。 Firewall

まずは真ん中に炎がくる

これは「Bossクラス」で、先程の「炎のクラス」を呼び出してあげる。

炎が両側へ広がる

まずは全ての炎を前もって呼び出しておいて、それを実際にアニメーションさせるタイミングを調整してあげる。 こんな感じのコードになります。 [c]

for (int i = 0; i<4; i++) { //Firewallが炎アニメーションのクラス //delaytimeでアニメーションのタイミングをづらしている。 Firewall firewall = [Firewall node]; firewall.position =ccp(+50i,-30); [self addChild:firewall z:10]; [firewall actionFireWall:profile delaytime:0.1f*i];

    Firewall *firewall2 = [Firewall node];
    firewall2.position =ccp(-50*i,-30);
    [self addChild:firewall2 z:10];
    [firewall2 actionFireWall:profile delaytime:0.1f*i];

}

[/c]

そうすれば私が思っていたアニメーションに近づきました。 スクリーンショット 2012 05 08 21 36 10

デモ動画

難しいのは行動パターン(AI)です。まだ、その調整が全然できていません。 エフェクトとともにこの行動パターンもしっかり考えていきたいです。