HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0426
axobj敵の自機追尾5解決


axobj

リンク

2008/4/26(Sat) 12:10:58|NO.15406

d3moduleでコクピット視点のシューティングゲームを作っています。
敵を表示するにあたって、自機を追尾するタイプの敵を作ろうと思ったのですが、自機の飛
行軌道をなぞるのではなく、常に最短距離のコースで追尾させるようにしようと思ったので
す。
しかし、肝心の距離を求める式が分かりません。
教えてくだされば幸いです。



この記事に返信する


べなりあ

リンク

2008/4/26(Sat) 13:12:12|NO.15409

敵の座標と自機の座標が分かっているのなら、それほど難しいことじゃないかと思います。
X,Y,Z値の差を求めて、それぞれを2乗して、平方根を求めれば距離は出ます。

ただ、最短距離で自機に向かわせる、というのであればX,Y,Z各方向に三角関数を用いた方が早い気がします。
距離を使わないと変なことになるので、結局は距離が必要になりますが…



SYAM

リンク

2008/4/26(Sat) 14:07:09|NO.15411

近似値。
x=水平方向の座標の差
y=垂直方向の座標の差
d=距離

if(x>y):d=x+((106*y)>>8):else:d=y+((106*x)>>8)

今書いてみただけで試してないのです。
たぶん誤差一割切ると思うのだけど。



ANTARES

リンク

2008/4/27(Sun) 11:07:59|NO.15429

自機の座標:(xm,ym,zm)
敵機の座標:(xe,ye,ze)
敵機の速度:ve
とすると、

以下、敵機の位置を原点とする相対座標系で考えます。

敵機に対する自機の方向(X-Y平面上のX軸正方向に対する角度)
  aemy=atan((ym-ye)/(xm-xe))
  (xm=xeのとき、aemy=±90度=±π/2ラジアン)

X-Y平面上でX軸をaemyだけ回転させたものをX'軸とすると、
自機も敵機も敵機の移動後の位置もX'-Z平面上にあるので

敵機に対する自機の方向(X'-Z平面上のX'軸正方向に対する角度)
  aemz=atan((zm-ze)/√((xm-xe)^2+(ym-ye)^2))
  (xm=xeかつym=yeのとき、aemz=±90度=±π/2ラジアン)
  ※^はべき乗の意味で使っている

敵機の移動距離(X'成分)vex'=ve*cos(aemz)
敵機の移動距離(Z 成分)vez =ve*sin(aemz)

敵機の移動距離(X 成分)vex =vex'*cos(aemy)
              =ve*cos(aemz)*cos(aemy)
敵機の移動距離(Y 成分)vey =vex'*sin(aemy)
              =ve*cos(aemz)*sin(aemy)



GENKI

リンク

2008/4/27(Sun) 11:13:40|NO.15430

式は他の方が解説されているので、考え方を。

敵を常に自機の方向を向かせてから進むようにすればいいかと。
ちょうどいいサンプルがありますのでどうぞ。
http://hspdev-wiki.net/?%BE%AE%A5%EF%A5%B6%2F%A5%EC%A1%BC%A5%B7%A5%F3%A5%B0%2F%A5%AB%A5%E1%A5%E9%A5%EF%A1%BC%A5%AF
カメラのモード(camMode)を1にしたものが近かったと思います。

手間をかければもう少し無慈悲にすることも出来ます。
・敵が向かう方向を、自機の移動予想位置に設定して、敵を常にそこを目指して進むようにします。
移動予想位置というのは、自機がそのままの速度で直線で進むと仮定して、それに敵の位置・速度を
考慮し、敵と自機が衝突すると予想される位置のことです。
だから場所的には自機の前方少し前になります。
先回りされるわけですから前述した方法よりも短時間で衝突するはずです。

移動予測値地点を直線で予想すると書いたのは、自機の軌道から曲線で予想したり速度変化も考慮し
たり出来れば精度は上がると思うのですが、労力に比べて得られる結果は期待出来ないような気がす
るためです。実際正確な軌道予測できたらどんな感じなんでしょうね。



axobj

リンク

2008/4/28(Mon) 22:58:10|NO.15472

遅くなりましたがありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.