弾の発射処理の最近のブログ記事

*cal_kakudoのサブルーチンを見てみます。

スペースキーを押すと敵が自機に向けて弾を発射します。
そのときの処理はどうなっているかというと・・・
弾の位置を敵の位置にセットしたあと、次の処理をします。
これにより、弾のx方向の移動量・y方向の移動量をそれぞれ算出します。

//角度計算(弾の移動方向を決める) (重要度:高)
*cal_kakudo
length_x = x - ex // X座標の差を求める
length_y = y - ey // Y座標の差を求める
rad = atan(length_y,length_x) // ターゲットとの角度を求める
dx = double (cos(rad)) * speed // x方向の移動量を計算
dy = double (sin(rad)) * speed // y方向の移動量を計算
return

以下の図のように、とりあえずlength_x・length_yを計算します。
(結果は必ずしも正になりませんがこれでちゃんと動く)

shoot_kaisetsu.png

次に、アークタンジェントを計算します。

suushiki_tan.png
であるので、
この式から座標を使って角度を求められます。

最後に
sin、cosを使って、比率に直します。
自機と敵の距離をzとすれば、
cosθ = length_x / z
sinθ = length_y / z
であるので、敵と自機の距離が離れていても近くても適切な速さが保たれます。

そして、それに適当な速さを掛け算して速さを調節しておしまい。

後はメインループ内でex += dxなどとすれば弾がどんどん動きます。
x,yの比率がうまくいっているので、自機の方に向かって弾が飛んできます。
(自機が動かなければですが)


◆おまけ
メインループ内で毎回
*cal_kakudoを呼び出せば、
誘導弾となります。
ただし、実際ゲームにするときは、
弾が永久に追尾するようにするとプレイヤーにとってつらいので
工夫しましょう。


※このままでは
・当たり判定がない
・スペースキー連打で弾が戻ってしまう
などの問題があるのでそのままではゲームになりません。
これを改良する方法については次回以降で扱っていきます。

今回は、シューティングゲームなどで使えると思われる、敵が自機の方向に弾を飛ばす というような方法のサンプルと、その解説をしていきます。

サンプルソースはつぎのようになります。
※HSP3.0で動作します。
ゲームづくりには基本となる部分です。




◆スクリーンショット
shoot_ss.png
◆解説
*cal_kakudo
というサブルーチンがポイントです。ここでの処理が今回一番のポイントである
弾の発射方向の計算
をしている部分です。

※長くなるので2回目へ続きます・・・