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

时间:2018-05-24 19:11:47

标签: javascript physics trigonometry gravity projectile

我有一颗以一定角度射击的子弹。我想要子弹 对重力作出反应。 以下代码位于项目符号的更新功能中。

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时,这会导致奇怪的抛射物不当行为。

对此最好/常规的解决方法是什么?

2 个答案:

答案 0 :(得分:2)

您的位置方程不依赖于角度。您只需要角度来初始化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

这不会使用重力作为加速度,因为没有时间变量我可以告诉

答案 1 :(得分:1)

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

this.vel.y += GRAVITY * time

可能有效