「EnDlEss DREamER」ブログ

最近はunity5メインで活動中。以前はツクールRGSSネタなど。

§ アイテム投げの処理

なんか頑張ってプログラムっぽい話&数学っぽい話。

バトルレイアウト変更に「アイテム投げ」のエフェクトを追加しようと思って色々と三角関数とかその辺をググッてる所。
実際に色々試してとりあえず一番投げる動作に近い処理が放物線ではなく円軌道。
戦闘画面だから縦と横の位置が常に変わるので、マリオのジャンプ起動について試しているサイトとかあったけど
あんまり参考にはならず、簡単な所で自分と敵の座標を取得し、その中央座標を算出。

            A
           /|
         /  |
       /    | 
      O――――C
    /
  /



中央座標を原点(点O)として、主人公座標(点A)と敵座標(点B)とする。
原点OからX正方向にA点の垂線とX座標の交点(C)を出す。
交点Cの座標は(AX,OY)である。
OC間はAXーOXで距離が出る。
AC間はOYーAYで距離が出る。
OA間は三角関数の三平方の定理?だっけかな??
「C^2 = A^2 + B^2」というやつで斜辺の長さも出る。
RUBYとしては「Math.hypot」というメソッドで出せる。
斜辺OA現在の角度も算出。
コサインとか試したけどなんか上手くいかず

「Math.atan2(CA, OC) * 180 / Math::PI」

というアークタンジェントというヤツでラジアンという値を出し、その値に180*円周率で普通の角度として出せる。
それにより角AOCが出るので

temp_x = Integer(AO * Math.cos((角AOC * Math::PI) / 180))
temp_y = Integer(AO * Math.sin((角AOC * Math::PI) / 180))

で角AOCがθ度の時のAの座標が出る。
あとは角度を加減算して円周上の座標を取得してスプライトに反映。


というのが基本的な考え方。
円の半径は敵との距離によって自動的に決まるのでその辺の設定はしなくてもおk。
問題はツクールは原点が左上を0,0としているので
原点Oからの角度で算出して座標とAの元々の座標が一致させるにはどうしたらいいかという点。
今のところ円軌道描いて敵には飛んでいくけど、主人公との座標のズレが生じていて×


そう考えるとメタルマックスのミサイル軌道の座標設定とかどうやってるんだろう?
ゴメス戦車の4連ミサイルとかブルフロッグの背中から出るミサイルとか計算知りたい!!
専用に座標テーブルでも作ってやってる気もするけどさぁ。

スクリプトとして公開するんで、汎用性がないとダメなんで計算とか自動処理するようにしないと
使い手の方でいちいち面倒な座標設定をエフェクトごとにスクリプト内で設定するとは思えないし。
俺だったら絶対にしたくない。

この円軌道の応用で、途中まで円軌道してそこから対象に直線で向かうバーチカルミサイルっぽい軌道とか
この計算って大事なんだねぇ・・・
だから中学とか高校で三角関数とか微分積分とか方程式とか社会じゃ絶対に使わねぇよ!!
と学生の頃なら思ってしまうことが、突然今さらのように必要になったりする。
プログラミングには数学の知識は必要だと改めて実感するmitsu-evoでした。

完成にはまだまだほど遠いです。


2011/04/01/Fri 00:10:52  思いつき/CM:0/TB:0/
new 動作周り終了♪ / MAIN / プログラムの初歩苦戦中。 old

COMMENT

COMMENT POST

/
/
/
/



 
 内緒です♪

TRACK BACK

  この記事のURL:
   http://edlogtkool.blog36.fc2.com/tb.php/737-4dd08b05


MAIN
copyright © 2006 「EnDlEss DREamER」ブログ. All Rights Reserved.
Template by TAE-3rd☆テンプレート工房