有两种形式让战机动起来,时间轴和代码。我主要讲解通过代码让战机移动。
通过代码让战机移动又有两种方式:1)在文档类中让战机移动;2)让战机自己移动。
在这一节中我们通过在文档类中添加代码让战机移动。修改文档类StartPlane(文档类代码参考《在界面上显示战机》)
package
{
importflash.display.MovieClip;
import flash.events.Event;
/**
* ...
* @author yl
*/
publicclass StartPlane extends MovieClip
{
var fighter:Fighter;
publicfunction StartPlane():void {
fighter= new Fighter();
fighter.x= 100;
fighter.y= 100;
addChild(fighter);
//添加事件监听器,Event.ENTER_FRAME表示刷屏方法
//每刷一次屏就调用一次onEnterFrame方法
addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
function onEnterFrame(event:Event):void {
//改变战机的位置
fighter.x -= 1;
}
}
}
在上面的代码中,我们首先将定义fighter变量的语句从构造方法中提取出来,然后放到方法外面。这样我们就可以再刷屏方法onEnterFrame中调用。
varfighter:Fighter;
在构造方法中添加时间监听器前要导入Event类:
importflash.events.Event;:
然后在构造方法中输入:
addEventListener(Event.ENTER_FRAME,onEnterFrame);
addEventListener为AS3内置方法,它表示在当前类(即StartPlane文档类)中增加时间监听器。
然后跟着第一个参数Event.ENTER_FRAME ,他表示刷屏方法。那么一秒钟刷多少次屏幕呢?查看场景中设置的帧频率,如下图。
可以看到,帧频是12,也就是说一秒钟将会刷12次屏幕。只要我们将战机的坐标在每次刷屏的时候进行小小的改变,就能实现动画效果。那么坐标的改变在哪里编写呢?
addEventListener第二个参数onEnterFrame 为刷屏方法,每次刷屏的时候这个方法会被调用。因此,我们可以在这个方法中实现动画效果。
在类中编写onEnterFrame刷屏方法:
functiononEnterFrame(event:Event):void {
//改变战机的位置
fighter.x -= 1;
}
在这里onEnterFrame方法有一个参数,它主要存储发生事件时的信息(如谁触发了这个事件,事件的类型等等)。
在方法体中,就是我们战机移动的代码。表示每一帧移动1个像素。