私は発射体を作成しようとしていますが、発射するとカタパルトから発射されたかのように動作します。問題は軌道を計算することです。スターティングポジションがあります。また、ターゲットは最も近い敵です。
2d 発射体の軌道で見つけたこの式を実装しようとしましたか?
xn = x0 + v * t * cos(theta)
yn = y0 + v * t * sin(theta)
そして、これが私がそれを実装した方法です:
float v = 70f;
t += Gdx.graphics.getDeltaTime();
angle -= 0.1f;
float xn = originX + v* t * MathUtils.cosDeg(angle);
float yn = originY + v* t * MathUtils.sinDeg(angle);
position.set(x,y);
以下のビデオのような弾道線に沿って発射体を動かそうとしています。ターゲットはカタパルトによって決定され、最も近い敵です: https://www.youtube.com/watch?v=mwU24AuQibw
編集
private float g = 9.8f;
private float v = 50;
public void update()
{
t = Gdx.graphics.getDeltaTime();
float dx = originX - target.x;
float dy = originY - target.y;
double radi = Math.sqrt(Math.pow(v, 4) - g * (g * dx * dx + 2 * dy * v * v));
double theta1 = Math.atan((v*v + radi) / (g * dx));
double theta2 = Math.atan((v*v - radi) / (g * dx));
float xn = originX + v * t * MathUtils.cos((float) theta1);
float yn = originY + v * t * MathUtils.sin((float) theta2);
position.add(xn,yn);
上記のコードを実行しましたが、 を使用したため、発射物が消えてしまいますadd(xn,yn)
が、 を使用するset(xn, yn)
と、発射物はまったく移動しません。v を変更して別の数値を試していましたが、違いはありません。また、theta1 と theta2 からも NaN 値が得られます。
最終編集
これらの式を実装するために考えられるすべての方法を試しましたが、うまくいきませんでした。代わりに別のものを作ることにしました。回答ありがとうございます。誰かがここに投稿された数式を使用できるように、このスレッドを保持します。