弾幕幾何

附録Dは、弾幕シューティングゲーム(以下「弾幕STG」と略記)における「弾幕」の種類や特性の分類を独自の視点からまとめあげた文書です。

  1. データとしての弾幕幾何
  2. 弾幕幾何の分類
  3. 弾幕幾何のオブジェクト指向的実装

本節(2節)では、独自の観点から弾幕幾何の分類を行います。なお基本的に、弾幕を実装するという観点から分類するので、必要以上に深入りした分類は行いません。

弾の分類

弾幕を構成する最小の基本要素である弾の分類について考察します。弾の形状が異なるだけで全く違う実装・描画速度になるので、この分類は非常に重要です。

B-n. 通常弾

まず、最も基本的な弾の実装が「通常弾」です。円形・レーザー以外の大抵の弾がこれに該当します。エネルギー弾やナイフ、お札など、多種多様な形状が考えられますが、用意したドット絵を進行方向に合わせて回転描画するという点で、実装上はどれも同じと言えます。

間違っても分類が面倒だったのではありません。f(^^;

B-c. 円形弾

円形弾と円形の通常弾
左: 泡状の完全対称な円形弾。 右: 円形だが対称性がない通常弾。

次に、真円形の完全対称な弾です。泡状の弾(・左)などが該当します。その優れた対称性から、実装が最も楽で、計算・描画負荷の少ない弾と言えます。

但し、対称性に欠ける楕円形などは「円形」に分類しません。例えば、陰陽玉(・右)は完全な対称性を持たないので、弾を回転させる処理が必要な「通常弾」の分類とします。

B-l. レーザー

さらに、レーザー(弾)が挙げられます。誘導線に続いて、画面端まで高速に被弾判定を発生させる光線などが該当します。

他の弾と違い、レーザーは定点から発射され画面端まで伸びていることが特徴です。但し、見た目がレーザーでも、有限長の場合は画面端判定などが不要なため「通常弾」に分類します。

また弾幕STGでは、通常のSTGと異なり、攻撃よりも自機の行動範囲制限を目的として弾幕に組み込まれることが多いでしょう。

位置関係での分類

静止画として切り取って見たときの弾幕の幾何的分類について考察します。基本的に、弾幕群の弾同士の相対的な位置関係(分布)で分類します。

D-r. 放射状分布

まず、もっともオーソドックスな放射状分布は、各弾が同心円状や螺旋状に並ぶタイプの弾幕群です。敵機から発射される全方位弾など、多くの弾幕が該当します。

自機の位置に関係なく、発射する敵機を中心として様々な角度に向けて弾が放射されるのが特徴です。

この弾幕群は、極座標系における記述が容易です。しかし、実装に極座標系を導入すると、三角関数の多用でオーバーヘッドが生じてしまう恐れがあります。実用上は、三角関数にメモ化などの工夫をするか、直交座標での表現に最適化しておく方がいいでしょう。

D-l. 直線状分布

次に、各弾が一直線状に並ぶ直線状分布の弾幕群です。

この弾幕群は、直交座標系(もしくは斜交座標系)における記述が非常に容易です。

単調な分避けやすいですが、高速弾にしたり、群数を増やすなど、難易度の調整に応用を利かせやすい弾幕群でもあります。

D-f. 図形分布

さらに、明らかに何らかの図形をイメージさせる形状に並ぶ図形分布の弾幕群が考えられます。ポンデリングや星状弾幕などが該当します。

見たまま分かるような図形分布の弾幕は、図形の輪郭を上手く表現しなければならず、避けることだけでなく実装の難易度も高いと言えます。

D-n. ノイズ

最後に、他の弾と独立な「ノイズ」が考えられます。ランダム弾や、雑魚敵が発射する単発弾などが該当します。

複数の弾を、規則的になるよう同じ式で定義したつもりでも、それが見た目の規則性を持っていなければ幾何的弾幕とは呼べません。はっきりとした完成形のイメージを持たずに、適当に実装してしまうとノイズ弾になってしまうことが多いので注意が必要です。

時間発展による分類

弾幕群の時間発展による分類を考察します。弾幕群の時間発展とは、次の描画フレームに移ることであって、必ずしも時間の要素による分類ではありません。

G-n. n 次発展

まず、最も基本的な時間発展として、時間帯によって動きが最大 n 段階まで変化する「 n 次発展」が考えられます。一定時間後に降下を開始する弾幕群などが該当します。

下位の弾幕群・弾で条件分岐を発生させるとオーバーヘッドが生じる可能性があります。単純な弾幕群は、時間による条件分岐なしの 1 次発展で記述できるので、弾数が多い場合は、発展次数をできるだけ抑えるようにしましょう。可能ならば、上位の弾幕群時間だけを監視するのも有効です。

G-r. 再発展

次に、周期的に動きが元に戻る「再発展」も考えられます。一定時間毎に繰り返し同じ弾幕が発射される場合などが該当します。

但し、再発展に分類するのは、実装的に弾幕群の時間を巻き戻す必要がある場合に限ります。例えば、振動しながら発展する(波状の)弾幕群は確かに周期性を持っていますが、三角関数を用いて一つの時間軸で記述できるのでただの 1 次発展です。

G-o. 非時間発展

さらに、時間以外の要素によって動きが変化する「非時間発展」も考えられます。画面端で反射する反射弾などが該当します。

自機の位置や自機弾による誘発など、トリッキー or 突発的な動きをする弾幕を作るためには、時間以外の要素で条件分岐を発生させる必要があります。