我有一颗以一定角度射击的子弹。我想要子弹 对重力作出反应。 以下代码位于项目符号的更新功能中。
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时,这会导致奇怪的抛射物不当行为。
对此最好/常规的解决方法是什么?
答案 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
可能有效