flash中物体运动基础之一---------匀速运动

此处只涉及到规则物体的运动!!

先定义一个Ball类继承自MovieClip,用作被移动的对象。定义Ball的x,y方向的速度、加速度,初始值都为0;定义质量,初始值为3;

public class Ball extends MovieClip
{
  private var _power:int = 3;
		
  private var _vx:Number = 0;
  private var _vy:Number = 0;
  private var _mass:Number = 3;
  private var _ax:Number = 0;
  private var _ay:Number = 0;
		
  public function Ball() 
  {
	if (stage) init();
	else addEventListener(Event.ADDED_TO_STAGE, init);
  }
		
  private function init(e:Event=null):void
  {
	removeEventListener(Event.ADDED_TO_STAGE, init);
	stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandle);
	stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandle);
	addEventListener(Event.ENTER_FRAME, update);
  }
}

 为了让Ball自行处理自己的移动,需要监听KeyboardEvent和Event事件。KeyboardEvent对象的keyCode属性(uint类型)记录了每次按下键的ascii码,通过此值我们就知道按了什么键,常用的是检测按下的方向键,下面是四个方向键与其对应的ASCII:

up    38
down   40
left    37
right    39

private function keyDownHandle(e:KeyboardEvent):void 
		{
			var key:uint = e.keyCode;
			if (key == 37)//left
			{
				vx = -_power;
			}
			if (key == 39)//right
			{
				vx = _power;
			}
			if (key == 38) //up
			{
				vy = -_power;
			}
			if (key == 40) //down
			{
				vy = _power;
			}
		}

当按下不同方向键时,分别设置不同方向上的速度,设置的速度大小相同为3,这就是Ball匀速运动了。vx,vy分别是Ball在x,y方向的速度。

private function keyUpHandle(e:KeyboardEvent):void 
		{
			vx = 0;
			vy = 0;
		}

keyUpHandle在按键弹起时执行,主要是恢复速度为0,即Ball将静止。但实际运动着的物体时不能立刻静止的。

private function update(e:Event):void 
		{
			x += vx;
			y += vy;
		}

update函数更新Ball的位置,设置Ball的x,y坐标。

 

最后为了测试,还需要建立一个Fla文件,设置它的文档类为Main.as,如下:

public class Main extends Sprite
	{
		private var _ball:Ball;
		
		public function Main() 
		{
			_ball = new Ball();
			_ball.x = 100;
			_ball.y = 100;
			addChild(_ball);
		}
		
	}

为简单,此处初始化Ball的位置为(100,100)。

 

posted @ 2010-07-25 12:43  ywxgod  阅读(603)  评论(0编辑  收藏  举报