Skip to content

第6回 Processing.js で初めてのゲームプログラミング

いよいよ、最終回になりました。

前回までで、ゲームとしての最低限の体裁は整ったものの、いまひとつ面白くはなっていませんでした。いくつか問題はありますが、まず、自機が強すぎですよね。ちょっと弱くしましょうか。

・自機のダメージをおおきく(32倍)
・敵の弾を大きく(+5)
・当たり判定をもうちょっと、大きく(+2)
・ボスの動きの幅を大きく、ゆっくりに

これは、パラメーターの変更だけで出来る部分です。上記には、決定した結果だけ書いたので、サラッと終わったようなカンジもしますが、実際にはいろんな数値を入れてなんども試しています。なにげに、時間もかかってしまうのですが、この調整という部分はゲームにとって、とっても大切な部分なので、がんばりがいがあります。さらに、iPhone で動かしてみたら、定常的に処理落ちしているようだったので、下記の変更を加えてみました。

iPhone対応
・フレームレートを 20 fps に(処理落ち対策)
・自機をマウス座標のY座標 -20に(指で自機が見えないため)

サンプルプログラム06-1

wise9-6-1

調整前よりは、よくなった気がするのですが、まだまだパッとしない感じですね。やはり、敵の攻撃が単調なカンジはパラメータの調整だけでは、いかんともしたがいです。ここはちょっと気合を入れなおして、ボスのHPの減り具合に合わせて、攻撃が変わるようにしましょうか。

増やす攻撃のパターンですが、tama クラスはそのまま使いたいので、簡単に買えられるパラメーターとしては、玉の大きさ、移動速度が挙げられます。これだけの調整で、できるだけ違いを出してみましょう。

たとえば、簡単にアイデアを出してみると

・でっかくて、移動速度がおそい弾
・高速で、コチラを狙ってくる弾

とか、なんだか嫌そうなカンジがしませんか? ではさっそく、この2つを実装してみましょう。主な変更点を抜き出してみました。

  //
  void fire_slow(float x, float y) {
    PVector v = get_normalV(ship.sx - x, ship.sy - y);
    danmaku.add(new Tama(x, y, 70, v.x * 4, v.y * 4, #ff00ff));
  }
  //
  void fire_fast(float x, float y) {
    PVector v = get_normalV(ship.sx - x, ship.sy - y);
    danmaku.add(new Tama(x, y, 10, v.x * 8, v.y * 8, #ff0000));
  }

サンプルプログラム06-2
wise9-6-2

お、なかなか変化が出てきて、いい感じじゃないでしょうか?ちょっと難しくなりすぎたかもしれません(^^) みなさん、クリアできましたか?

ソースに話を戻すと、これまでにない、新しい処理としては自分を狙ってくる弾の実装があります。ボスと位置と自機の位置から、弾の進行方向を計算していますが、そこで PVector クラスnormalize メソッドをつかって、ベクトルの正規化を行っています。正規化というのは、ベクトルの向きはそのままで、大きさを1にするという処理です。正規化をすませると、ベクトルは非常に便利に使いやすくなるんですね。正規化がすんでしまえば、掛け算をするだけで、速度調整はできるからです。Processing の正規化メソッドは、PVector クラスにしかないので、PVector を new していますが、それ以外は特別なことはしていません。

  PVector get_normalV(float vx, float vy) {
    PVector v = new PVector(vx, vy);
    v.normalize();
    return v;
  }

ベクトルの正規化

みなさんも、自分にちょうどいいくらいの弾の速度に調整してみてもらってもいいかもしれませんね。僅かな数字の違いで、ゲーム感覚が全く変わるのがよくわかると思います。あと自機が弾にあたったことを分かりやすくするため、あたった弾は消えるようにしています。こっちのほうが、いい感じだったので採用してみました。

なお、今回は使っていませんが、さらに加速度のパラメータを追加して、速度が動的に変化するようにしても面白いです。物理で加速度について習ったことがある人は、ゼヒ、改造してみてください。加速度について、実装はそんなに難しくないのですが、加速度をつかって玉の動きをいい感じに調整するのは、なかなか骨が折れます。世の中の多くの弾幕ゲーは、ほんとうに凄いと思いますね。

さて、これまで、全6回にわたって連載してきた Processing.js で初めてのゲームプログラミングですが、ひとまずこれで、終了です。いかがだったでしょうか?

とりあえず、この連載で作ってきたソースコードは、好きなだけ改造して公開してもらって大丈夫です。よかったら、9leap のコンテストにも投稿してみてください。みなさんのゲームプログラムに役になてることが、なにより嬉しいです!

それでは、また!
別の新しい記事でお会いしましょう。

このエントリーをはてなブックマークに追加
はてなブックマーク - 第6回 Processing.js で初めてのゲームプログラミング
Post to Google Buzz
Share on GREE

Related posts:

  1. 第3回 Processing.js で初めてのゲームプログラミング
  2. 第4回 Processing.js で初めてのゲームプログラミング
  3. 第5回 Processing.js で初めてのゲームプログラミング
  4. 第1回 Processing.js で初めてのゲームプログラミング
  5. 第2回 Processing.js で初めてのゲームプログラミング

Facebook comments:

Post a Comment

Your email is never published nor shared. Required fields are marked *
*
*