package {
import flash.display.*;
import flash.events.*;
public class MovingCar extends MovieClip {
private var leftArrow, rightArrow, upArrow: Boolean;
public function MovingCar() {
// 每一帧都移动小车
addEventListener(Event.ENTER_FRAME, moveCar);
// 响按键事件
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyPressedDown);
stage.addEventListener(KeyboardEvent.KEY_UP,keyPressedUp);
}
// 将箭头变量设为True
public function keyPressedDown(event:KeyboardEvent) {
if (event.keyCode == 37) {
leftArrow = true;
} else if (event.keyCode == 39) {
rightArrow = true;
} else if (event.keyCode == 38) {
upArrow = true;
}
}
// 将箭头变量设为false
public function keyPressedUp(event:KeyboardEvent) {
if (event.keyCode == 37) {
leftArrow = false;
} else if (event.keyCode == 39) {
rightArrow = false;
} else if (event.keyCode == 38) {
upArrow = false;
}
}
// 小车向前移动
public function moveCar(event:Event) {
if (leftArrow) {
car.rotation -= 5;
}
if (rightArrow) {
car.rotation += 5;
}
if (upArrow) {
moveForward();
}
}
// 计算X和Y并移动小车
public function moveForward() {
var speed:Number = 5.0;
var angle:Number = 2*Math.PI*(car.rotation/360);
var dx:Number = speed*Math.cos(angle);
var dy:Number = speed*Math.sin(angle);
car.x += dx;
car.y += dy;
}
}
}
如果想方向键按下的话,我们要计算小车的角度,用弧度表示。rotation是知道的,不过是用度来表示的,然后将度转为弧度,除以360,乘以2π。
(1)除以360,将0~360的值转换为0~1.0的值。
(2)乘以2π,将0.0~1.0的值转换为0~0.628的值。
弧度=2*π*(度/360)
反过来,当我们希望将弧度转化为度是、时,可以这么做:
(1)除以2π,将0~0.628的值转换为0。0~0.1的值。
(2)乘以360,将0~1.0的值转化为0~360的值。
度=360*弧度/(2*π)。
得到了弧度,就可以将它传给Math.cos和Math.sin计算得到移动的dx和dy,然后乘以之前的speed属性。这样一来,每一帧小车就会移动5像素。