ホーミング@シューティング
今日はホーミング機能を作っていきたいと思います。
仕組みは、前回エントリーのとおり、ロックオンした敵を敵リストへを登録しておき、ホーミング弾を打つ時点で敵リストに登録されている敵への参照を持った弾を撃つ仕組みです。ちなみに、敵がいなくなると弾は追尾をあきらめて、どこかに飛んでいなくなります。
今回追加したところは、追尾処理関数、bullet構造体に弾スピードや方向などの変数。
です。
と、とりあえず画面からいきます。
若干わかりづらいですが、黄色い矢印の下に弾が写っています。
この弾が矢印のように目的の敵に向かっていくようになっています。
今回躓いたことは、πの定数です。
VCではmath.hでπの定数としてM_PIが定義されているのですが、なぜか参照できませんでした。
一応、math.hの宣言部を確認してみると
#if defined(_USE_MATH_DEFINES) && !defined(_MATH_DEFINES_DEFINED) #define _MATH_DEFINES_DEFINED 〜コメント〜 #define M_E 2.71828182845904523536 #define M_LOG2E 1.44269504088896340736 #define M_LOG10E 0.434294481903251827651 #define M_LN2 0.693147180559945309417 #define M_LN10 2.30258509299404568402 #define M_PI 3.14159265358979323846 #define M_PI_2 1.57079632679489661923 #define M_PI_4 0.785398163397448309616 #define M_1_PI 0.318309886183790671538 #define M_2_PI 0.636619772367581343076 #define M_2_SQRTPI 1.12837916709551257390 #define M_SQRT2 1.41421356237309504880 #define M_SQRT1_2 0.707106781186547524401 #endif /* _USE_MATH_DEFINES */
と書かれているのですが、VC++のエディタで開くとグレー色になって無効っぽい表示になっていました。
_USE_MATH_DEFINESを#defineしなければならないのでしょうか・・・調べてみます。
ホーミングで移動方向を動かす処理は以前にしたことがあったので、おぼろげに思い出しながら書きました。
途中、どうしても左方向にしか回らない状態が結構続きました。原因はrotateを足しこんでいく分岐で、左方向に1度と右方向にー1度足しこむ処理をしていたミス。。。
他は、タイミングや方向が悪いと敵の周りでぐるぐる回る弾になってしまうので、調整が大変でした。だいぶ改善しましたが、今も時々ぐるぐる回ります。
今回は調整やロジックのミスが多かったですが、明日のレビューまでには説明できるようにしたいです。