如何在flixel + as3中制作抛射物运动

时间:2015-02-06 01:56:41

标签: actionscript-3 projectile flixel

所以我有我的角色,当我按下鼠标按钮时,应该发射一些激光,以取出那些坏人。

目前我加入了我的小激光。然后我用这个:

        this.velocity.x = (MousePos.x - StartPos.x) * bulletSpeed
        //same for Y

(我也试过这个)

        this.x += (MousePos.x - StartPos.x) / bulletSpeed
        //same for Y

现在这将是很好的,除了激光不会以相同的速度移动。 我的意思是,如果鼠标是1000像素,或者500像素,它将在相同的时间内到达,这意味着如果鼠标距离更远,它会更快。

我需要知道的是,如何使对象以特定的速度移动,无论它需要走多远。

谢谢,

1 个答案:

答案 0 :(得分:2)

这是纯数学。任一轴上的速度都不能大于BulletSpeed,所以你计算的任何东西应该是这样的:

velocity.x = BulletSpeed * t;

其中t是介于-1和1之间的数字。 而且,这个数字对于x和y通常是不同的。

velocity.x = BulletSpeed * tx;
velocity.y = BulletSpeed * ty;

现在,主要部分 - 你如何计算tx,ty的价值? 首先,获取dx,dy以及从StartPos到MousePos的距离。

var dx:Number = MousePos.x - StartPos.x;
var dy:Number = MousePos.y - StartPos.y;
var dist:Number = Math.sqrt(dx * dx + dy * dy);

很容易看出,当物体到达距离时,它的x和y坐标也经过dx和dy距离。它是在同一时间内发生的,但是dx和dy通常是不同的,因此坐标必须通过不同的步骤改变才能同时到达终点。

var step_x:Number = dx / dist;
var step_y:Number = dy / dist;

这些值将始终介于-1和1之间。现在您只需要应用BulletSpeed:

velocity.x = BulletSpeed * step_x;
velocity.y = BulletSpeed * step_y;

或者,现在没有简化

velocity.x = BulletSpeed * dx / dist;
velocity.y = BulletSpeed * dy / dist;