自機狙い弾の作り方
ふと気づいたらこのブログを見ていた嫁(ゲームやプログラミングに一切興味無し)が、CF2.5を「シトラスフ○ック2.5」と読んでいました。
一体何を食って育ってきたらそう読めるようになるのか…
というわけで、あいも変わらずチマチマと敵性MOBを作りながら、
寄り道しております。
ですが寄り道のお陰で幾つか共有出来る技術が出て来ましたので紹介を。
先ずは自機狙い弾でございます。
自機狙い弾のイベント設定
こういう奴ですね。
敵MOBがプレーヤーのいる方向に弾を撃ってくる動作です。
(ホーミングではなく、発射時に一度だけプレーヤーのいる方向を計算して撃ってくる動作)
先にお断りをしておくと、この内容は、某有名講座で紹介されていた方法に自分なりの改変を加え、解説をしたものとなります。
それでは具体的なイベント解説です。
フレーム画面はこんな感じです。
0.5秒毎に、敵からプレーヤー(猫)に向かって弾が発射される、というイベントを組んであります。
(この条件は何でも自由に設定しましょう!)
「発射」ではなく、「オブジェクトを作成」を選びましょう。
で、これが作成された弾自体がプレーヤーの方向へ飛んでくるイベントになります。
前提として、
変数(移動速度(半径))=30を代入しています。
内部フラグ0=弾オブジェクトが敵の位置に作成されたらフラグが無効のイベントが実行。その直後にフラグが有効に切り替わり、以降、「フラグ0が有効」で定義されたイベントが実行され続ける、という構造になっています。
それでは弾の移動アルゴリズムの解説です。
ざっくり言うと、自機狙いの動作は「三角関数」の公式を用いて動かします。
必要な予備知識は、「sin=サイン」「cos=コサイン」「atan=アークタンジェント」の3つです。
*この3つは当ブログでも、前記事で解説しておりますし、他所サイト様でも分かりやすい解説が豊富にありますので、未見の方は予習される事をお勧めします!
CF2.5 三角関数を使った自力!円運動講座 ② - 自作ゲームの大福島
変数(次のX座標)、変数(次のY座標)は、
弾が1フレーム後にいるはずの座標を格納します。
弾が敵オブジェクトの位置に作成されたばかりの時ですから、作成された瞬間の弾の位置を記録させてやりましょう。
次の行では、
変数(主人公のいる角度)に、アークタンジェント関数を使って敵とプレーヤーとの角度を代入してやります。
角度を求め終わったら、弾の初期設定は完了です。
内部フラグ0を有効に切り替えて、移動イベントに移行します。
後半のイベントでは、最初に設定した移動速度と角度を使って、フレーム毎にX座標、Y座標の位置を割り出します。
イメージ図です。(わかりやす…いのか?)
三角形の斜辺が1フレーム毎に30ピクセル分進みます、
それに対する横と縦の比率がそれぞれCOS(横)、SIN(縦)でしたね。
ですので、1フレーム後に弾があるべき座標はそれぞれ、
X軸=移動速度(=30)×cos
Y軸=移動速度(=30)×sin としてやる事で、実際の移動距離が出せますね!
後はこれを現在の弾のX軸、Y軸の座標に加算してあげる事で、1フレーム後にあるべき座標に移動し続ける事が出来るわけです。
これで自機狙い弾の完成です。
一つ雛形を作っておけば、クローンを使って様々なデザインに変更して活用出来ると思います。
また、プレーヤーのいる方向に向かって突撃してくる敵、などにも応用出来ますね。
ちなみに、プレーヤーのいる角度を求めるイベントを「常に実行」してやると、
死ぬまで追い続ける永久ホーミング弾が完成します。
何これコワイ