我正在尝试创建一个射弹,当它被发射时,它的行为就像是从弹射器射击一样。问题是计算轨迹。我有起始位置。目标也是最近的敌人。
我试图实现这个公式,我在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 值。
最终编辑
我尝试了所有我能想到的方法来实现这些公式,但它对我不起作用。我决定做一些不同的事情。谢谢大家的回答。我将保留此线程,以便有人可以使用此处发布的公式。