这是纯数学。任一轴上的速度都不能大于 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);
很容易看出,当物体经过 dist 距离时,它的 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;