之乎者烨 发表于 2009-1-22 16:54:29

为AS2.0添砖加瓦-编写类扩展(2) (1)

MX2004 as2.0制作一个控制移动的类


新建一个as文件,存为moveclass.as


class moveclass extends MovieClip
//定义这个类为MovieClip扩展类:
{
        var speed:Number;
        var w:Number;
        var h:Number;
//定义三个变量分别为速度,移动边界宽,移动边界长
        function move_ctrl(w:Number,h:Number,speed:Number)
//写一个有三个变量的move_ctrl方法,用于控制MovieClip;       
{
               
         if(Key.isDown(Key.RIGHT)) //得到方向键的确定
         {
                                               
                this._x=speed; //MovieClip向X轴移动speed位置
        this._rotation = 90;//转向
         if(this._x > w)//判断是否超过边界宽
         {
            this._x = w;
         }
                                                  
      }

//下面同上进行方向键判断
if(Key.isDown(Key.LEFT ))
{
this._x -=speed;
this._rotation = 270;
if(this._x < 0)
{
this._x = 0;
}
                                                  
}
if(Key.isDown(Key.UP))
{
this._y -=speed;
this._rotation = 0;
if(this._y < 0)
{
this._y = 0;
}
                                                  
}
if(Key.isDown(Key.DOWN))
{
this._y=speed;
this._rotation = 180;
if(this._y > h)
{
this._y = h;
}
                                                  
}

//微调方向,小转弯.                                          
if (Key.isDown(Key.LEFT) && Key.isDown(Key.UP) && !Key.isDown(Key.RIGHT) && !Key.isDown(Key.DOWN)) {
this._rotation = 315;
                }
if (Key.isDown(Key.RIGHT) && Key.isDown(Key.UP) && !Key.isDown(Key.LEFT) && !Key.isDown(Key.DOWN)) {
this._rotation = 45;
                }
if (Key.isDown(Key.LEFT) && Key.isDown(Key.DOWN) && !Key.isDown(Key.RIGHT) && !Key.isDown(Key.UP)) {
this._rotation = 225;
}
if (Key.isDown(Key.RIGHT) && Key.isDown(Key.DOWN) && !Key.isDown(Key.LEFT) && !Key.isDown(Key.UP)) {
this._rotation = 135;
}
                                       
}
}



然后建立一个fla,在里面建立一个MovieClip,比如汽车等要移动的物体.
Ctrl L.调出库,点这个MC,按右键,选择Linkage,用于把这个MC扩展
成CLASS类.

如图所示进行设置:

www.ad119.cn/bbs/attachments/websoft/20090122/200912216542954677801.gif



www.ad119.cn/bbs/attachments/websoft/20090122/200912216543350077802.gif


然后.返回Layer1,放入这个MC.并命名为Linkage里所取名一样.


www.ad119.cn/bbs/attachments/websoft/20090122/200912216543351577803.gif


现在我们在Layer1的第一帧里写上:





                                                                                                   

                                    MX2004 as2.0制作一个控制移动的类


新建一个as文件,存为moveclass.as


class moveclass extends MovieClip
//定义这个类为MovieClip扩展类:
{
        var speed:Number;
        var w:Number;
        var h:Number;
//定义三个变量分别为速度,移动边界宽,移动边界长
        function move_ctrl(w:Number,h:Number,speed:Number)
//写一个有三个变量的move_ctrl方法,用于控制MovieClip;       
{
               
         if(Key.isDown(Key.RIGHT)) //得到方向键的确定
         {
                                               
                this._x=speed; //MovieClip向X轴移动speed位置
        this._rotation = 90;//转向
         if(this._x > w)//判断是否超过边界宽
         {
            this._x = w;
         }
                                                  
      }

//下面同上进行方向键判断
if(Key.isDown(Key.LEFT ))
{
this._x -=speed;
this._rotation = 270;
if(this._x < 0)
{
this._x = 0;
}
                                                  
}
if(Key.isDown(Key.UP))
{
this._y -=speed;
this._rotation = 0;
if(this._y < 0)
{
this._y = 0;
}
                                                  
}
if(Key.isDown(Key.DOWN))
{
this._y=speed;
this._rotation = 180;
if(this._y > h)
{
this._y = h;
}
                                                  
}

//微调方向,小转弯.                                          
if (Key.isDown(Key.LEFT) && Key.isDown(Key.UP) && !Key.isDown(Key.RIGHT) && !Key.isDown(Key.DOWN)) {
this._rotation = 315;
                }
if (Key.isDown(Key.RIGHT) && Key.isDown(Key.UP) && !Key.isDown(Key.LEFT) && !Key.isDown(Key.DOWN)) {
this._rotation = 45;
                }
if (Key.isDown(Key.LEFT) && Key.isDown(Key.DOWN) && !Key.isDown(Key.RIGHT) && !Key.isDown(Key.UP)) {
this._rotation = 225;
}
if (Key.isDown(Key.RIGHT) && Key.isDown(Key.DOWN) && !Key.isDown(Key.LEFT) && !Key.isDown(Key.UP)) {
this._rotation = 135;
}
                                       
}
}



然后建立一个fla,在里面建立一个MovieClip,比如汽车等要移动的物体.
Ctrl L.调出库,点这个MC,按右键,选择Linkage,用于把这个MC扩展
成CLASS类.

如图所示进行设置:

www.ad119.cn/bbs/attachments/websoft/20090122/200912216542954677801.gif



www.ad119.cn/bbs/attachments/websoft/20090122/200912216543350077802.gif


然后.返回Layer1,放入这个MC.并命名为Linkage里所取名一样.


www.ad119.cn/bbs/attachments/websoft/20090122/200912216543351577803.gif


现在我们在Layer1的第一帧里写上:





                                                                                                   

                                    
car.onEnterFrame = function() {
car.move_ctrl(300,200,10);
}

就可以调用这个设置好的扩展类及其方法:
只要写上3个参数变量就行

也可以先设定变量或者和输入文本框.如:

speed =5;
w = Stage.width;
h = Stage.height;
car.onEnterFrame = function() {
car.move_ctrl(w,h,speed);
}


flash6.0做这样一个移动控制也很方便.可以参考FLASH6.0里的帮助文件也有一个汽车控制
但是7.0的AS2.0的目的.是能够把代码和FLA尽量分开写.脚本被作为一个Class类.可以更好
的多重利用.修改扩展脚本更方便.

这个例子很简单.只是介绍一下AS2.0和AS.10的区别,其实可以写得更复杂一点.比如更好的
控制微调.做FLASH游戏的高手甚至可以把这个CLASS写成自己专用的控制引擎.   





页: [1]
查看完整版本: 为AS2.0添砖加瓦-编写类扩展(2) (1)