如何将重力应用于具有定向速度的射弹?
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
这并没有使用重力作为加速度,因为据我所知没有时间变量
我有一颗倾斜发射的子弹。我想让子弹 对重力作出反应。 以下代码在一个子弹的更新函数中。
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
这并没有使用重力作为加速度,因为据我所知没有时间变量