我们已经学习了让物体沿水平、斜方向运动。这次我们再进一步,学习如何让物体沿任意方向运动吧。
假设物体的运动速度为v,那么物体沿任意方向的运动一般都可以被拆分成为x轴,y轴两个方向上的运动。假设拆分后在x轴方向的速度为vx,在y方向上的速度为vy,物体运动方向与x轴方向的夹角为θ
vx = cosθ * v
vy = cosθ * v
使用弧度让物体的运动方向每次都不一样
package
{
import flash.display.MovieClip;
import flash.events.Event;
public class Main extends MovieClip
{
private var vx:Number = 4;
private var vy:Number = 4;
private var angle:Number = 0;
public function Main()
{
vx = 4 * Math.cos(angle);
vy = 4 * Math.sin(angle);
this.addEventListener(Event.ENTER_FRAME, onFrame);
}
private function onFrame(e:Event)
{
plan.x += vx;
plan.y += vy;
//如果飞机飞出舞台,重置其坐标
if (plan.x > stage.stageWidth || plan.x < 0 || plan.y > stage.stageHeight || plan.y < 0)
{
plan.x = stage.stageWidth / 2;
plan.y = stage.stageHeight / 2;
//增加角的弧度
angle += 2 * Math.PI / 30;
//经过一周后 弧度重置
if (angle > 2 * Math.PI)
{
angle -= 2 * Math.PI;
}
vx = 4 * Math.cos(angle);
vy = 4 * Math.sin(angle);
}
}
}
}
这个程序的关键点在于移出画面外时的处理。
//增加角的弧度
angle += 2 * Math.PI / 30;
//经过一周后 弧度重置
if (angle > 2 * Math.PI)
{
angle -= 2 * Math.PI;
}
此处 角度 递增使用2*Math.PI / 30,可直观的看出每次增加1/30周。
下面的重置弧度则是为了避免出现过大的弧度值,过大的弧度值可能会在计算时出现差错,以及避免运算时间过长。