前回 に続き、プチコンっぽいシンプルなサンプルをご紹介します。
今回は以下のように花火みたいにパーッと開く、弾幕系のゲームにありそうな弾の動きをスプライトのアニメ設定で実装してみます。
サンプル その1
アニメーションの事前定義
まず5~10行の FOR ループで、弾を動かすためのアニメーションを事前定義しています。一度に発射される弾の数を24として、それぞれ3種類づつ定義しているので、全部で72個のアニメーションが定義されることになります。
7行目の24個(ループで24回呼ばれるので)のアニメーションは、基本的な動きで、中心から24方向に真っすぐ弾が飛んでいきます。アニメーションの移動先となる弾の位置は、三角関数の COS/SIN で計算しています。
8行目の24個のアニメーションは、7行目とほぼ同じなのですが、速度が倍になっています。
9行目の24個のアニメーションは、やはり7行目をベースにしていますが、途中から角度が 15度 追加されますので、時計回りに回転が加わります。
実際に弾を発射する処理
12~21行の UNTIL ループが、実際に弾を発射するメイン部分です。
13行目では事前に定義した3種類のアニメーションのうち1つをランダムに選択し、また表示されるキャラクタもある範囲内でランダムに選択しています。
14行目では弾の発射位置(X座標とY座標)を、これもランダムで決めています。
15~19行の FOR ループが実際に24個の弾を発射している部分で、13~14行目で決めたランダム値を参照して、個々のスプライトを生成しています。
実行の様子
以下が実行の様子です。3種類のアニメーションしか用意していない割りには、よく動いているとおもいます。
サンプル その2
さて、アニメーションの機能が使えそうだとわかったところで、サンプルコードを改良してみましょう。
サンプル1と異なり、事前にアニメーションの定義をせず、スプライトごとにアニメーションを生成しています。これにより広がる範囲やスピードなど、変化する値を増やせ、結果としてバリエーション豊かな表示になることが期待できます。
コードを見てみる
事前定義がないぶん、さきほどより短いコードで実装できました。
ポイントは13行目ですね。サンプル1で事前定義していた弾の移動アニメーションを、この行でスプライトごとに生成して設定しています。
なお8行目の RD は、弾が途中から時計回りや、反時計回りをするための変数です。RD はランダムに -15,0,15 の値のどれかになるので、アニメーション設定の後半の部分で、移動先を決定するときの角度に反映させています。
実行の様子
改めて、以下がサンプル2の実行の様子です。コードは短いですが、サンプル1よりバリエーションが豊富になっているのがわかるでしょうか。
これに当たり判定のある自機を表示させるだけで、弾幕避け系のゲームが作れちゃいそうですねw
というわけで
個人的にシューティングゲームが好きなので、それ系のサンプルのほうが、サクサク書ける気がします。見た目にも楽しいですし。
プチコンのアニメーション機能は便利で、特に弾が飛び交う弾幕系のゲームにはかなり向いている機能だと思います。ぜひいろいろ遊んで、プチコンの実力をどんどん引き出してあげてください。
それではまた!