如何将重力应用于具有定向速度的射弹?

How to apply gravity to a projectile that has directional velocity?

我有一颗倾斜发射的子弹。我想让子弹 对重力作出反应。 以下代码在一个子弹的更新函数中。

this.pos.x += Math.cos(this.angle * Math.PI/4) * (this.vel.x);
this.pos.y += Math.sin(this.angle * Math.PI/4) * (this.vel.y);

这意味着子弹已经射向 this.angle,这应该不会改变。速度应始终成 this.angle 的角度。 现在的问题是:如何添加重力? 这是我到目前为止尝试过的方法。

以下代码简单地使子弹弯曲(向下,也向上)。

this.pos.x += Math.cos(this.angle * Math.PI/4) * (this.vel.x);
this.pos.y += Math.sin(this.angle * Math.PI/4) * (this.vel.y);
this.vel.y += GRAVITY

我也试过这个:

this.pos.x += Math.cos(this.angle * Math.PI/4) * (this.vel.x);
this.pos.y += Math.sin(this.angle * Math.PI/4) * (this.vel.y);
this.vel.y += Math.sin(this.angle * Math.PI/4) * GRAVITY

后者是我最接近我想要它做的事情。然而, 当 this.angle 为 0 时,sin(0) is also 0。当角度为 0 时,这会导致奇怪的射弹行为不当。

最好/传统的解决方法是什么?

时间有变数吗?如果是,那么

this.vel.y += GRAVITY * time

可能有用

你的位置方程不依赖于角度。您应该只需要角度来初始化 vel.x 和 vel.y 值。

你应该有一个正常的速度并用

初始化它们
var bulletSpeed = 100;
this.vel.x = Math.cos(this.angle)*bulletSpeed;
this.vel.y = Math.sin(this.angle)*bulletSpeed;

然后用

更新值
this.pos.x += this.vel.x;
this.pos.y += this.vel.y;
this.vel.y += GRAVITY

这并没有使用重力作为加速度,因为据我所知没有时间变量