【问题标题】:How to make projectile motion in flixel + as3如何在 flixel + as3 中进行抛射运动
【发布时间】:2015-04-06 02:22:14
【问题描述】:

所以我有我的角色,当我按下鼠标按钮时,他应该发射几束激光来消灭那些坏人。

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

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

(我也试过这个)

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

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

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

谢谢,

【问题讨论】:

  • 你试过分离出进程吗?运动和位置是两个不同的属性。当您按下鼠标按钮时,将您的对象移动到鼠标位置,然后计算速度。您使用的是什么类型的动作?欧拉还是维莱?您正在使鼠标位置成为速度计算的一部分。如果您希望鼠标确定速度,您只想这样做。您可以将 MousePos.x - StartPos.x 替换为恒定速度值。

标签: actionscript-3 projectile flixel


【解决方案1】:

这是纯数学。任一轴上的速度都不能大于 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;

【讨论】:

  • 完美运行,谢谢。我花了几个小时试图弄清楚数学,虽然我几次接近,但我就是想不出来。这绝对有帮助。
猜你喜欢
  • 1970-01-01
  • 2018-02-14
  • 2011-12-24
  • 2015-03-15
  • 2018-05-07
  • 1970-01-01
  • 2012-12-04
  • 2017-12-04
  • 2012-07-04
相关资源
最近更新 更多