如何在 flixel + as3 中制作弹丸运动
How to make projectile motion in flixel + as3
所以我有我的角色,当我按下鼠标按钮时,他应该发射几束激光,干掉那些坏蛋。
目前我正在添加我的小激光。然后我用这个:
this.velocity.x = (MousePos.x - StartPos.x) * bulletSpeed
//same for Y
(这个我也试过了)
this.x += (MousePos.x - StartPos.x) / bulletSpeed
//same for Y
现在这会很棒,除了激光不以相同的速度移动这一事实。
我的意思是,如果鼠标距离 1000 像素或 500 像素,它将在相同的时间内到达,这意味着如果鼠标距离较远,它会更快。
我需要知道的是,如何使物体以特定的速度移动,无论它需要走多远。
谢谢,
这是纯数学。任何一个轴上的速度都不能大于 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;
所以我有我的角色,当我按下鼠标按钮时,他应该发射几束激光,干掉那些坏蛋。
目前我正在添加我的小激光。然后我用这个:
this.velocity.x = (MousePos.x - StartPos.x) * bulletSpeed
//same for Y
(这个我也试过了)
this.x += (MousePos.x - StartPos.x) / bulletSpeed
//same for Y
现在这会很棒,除了激光不以相同的速度移动这一事实。 我的意思是,如果鼠标距离 1000 像素或 500 像素,它将在相同的时间内到达,这意味着如果鼠标距离较远,它会更快。
我需要知道的是,如何使物体以特定的速度移动,无论它需要走多远。
谢谢,
这是纯数学。任何一个轴上的速度都不能大于 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;