はかせのラボ

私の頭の中を書いていく雑記ブログです

DirectX ボム実装②

あいさつ

どうも、はかせです。
なんかわからないんですが、体調がすこぶる悪いです。
熱とかはないんでインフルではないと思ってます。
最近寒暖差が激しかったりとかで体調が崩れてるのかもしれませんね。

そんなわけで今回は実装というよりはそのための設計と準備って感じです。

なんの設計?

アイテムとその取得周りです。
今現在、私のプログラムでは「当たった回数」はわかりますが、
「誰と当たったか」はわかりません。

アイテムを取得するためには、
「アイテムに当たった」ことをわかるようにする必要があります。

何が問題なの?

普通であれば衝突処理は、
①衝突判定
②衝突情報生成
③衝突情報を渡して衝突応答

という3ステップを踏むと思います。

ですが、今回の私の作っている弾幕シューティングのようなものだと
意外と②の処理が重かったりします。

そこで処理負荷を軽減するため私は、
衝突判定を行う各オブジェクトをタグでグルーピングすることで
当たる相手を限定し、「誰と当たったか」ではなく「何回当たったか」
で衝突応答をさせていました。

今までであれば自機に当たるもの = 敵もしくは敵の弾でした。
ただこのままではアイテムを増やしたとき当たった相手が
アイテムなのか敵なのかの判別が出来ません。

弾幕シューティングである以上ボムとパワーアップアイテムは外せません。
なんとかパフォーマンスを維持しつつ相手の情報を渡す必要があります。

どういう風に解決するの?

誰に当たったのかの情報を渡します。

ただ先にも書いたようにちゃんとした衝突情報
(誰と、いつ、どこで、どのくらいの力でぶつかったかetc...)
を生成して渡すと重いので、誰とぶつかったかの情報のみを渡します。

これならば情報を生成せずとも
衝突判定を行うコライダーのポインターを渡すだけで実現できます。

コライダーは当然既に作られているので生成コストはかかりませんし、
生成しないのでメモリにもノーダメージです。

あとがき

今回はボム実装②でした。
処理負荷軽減のために削った情報のせいで
本来容易に出来るはずのアイテム取得について
頭を悩ますことになってしまいました。

ただ今回の設計ならばパフォーマンスを維持しつつ、
情報を渡すことが出来ると思っています。
次回は今回の設計に則った実装をしていきたいと思います。

それでは今回はこの辺でノシ