[1b][序]
[/1b]基于类的编程,使得我们可以更加轻松地定制属于自己的对象,同时也给已有类的扩展提供了极大的方便。
现在我们可以通过extends关键字实现继承,并通过import来导入位于其他.as文件中的类。
在这些基础之上,我们完全可以发展自己的想象力,改进已有的AS,使之成为一款适合自己的脚本语言。!
我和花兄的这两篇教程,算是打了个头炮,虽然简单,但是希望能起到抛砖引玉的作用。
以后欢迎大家积极地把自己写的类放上来,配上教程和源文件下载,以供大家学习使用。
P.S.对于那些有价值的扩展类(常用且通用性强),蓝色老大会适当做出奖励哦

[1b][正文][/1b]
下面这个例子非常简单,它向你说明如何扩展MoiveClip类,加入自己编写的方法。
如果你是一名数学老师,那么三角函数的图像肯定是你经常要用到的东西,下面我们就来扩展MovieClip类,
增加一个绘制正/余弦三角函数图像的方法。
第一步,编写类定义文件:
首先,新建一个Action Script File,命名为:JC_MCExtend.as。
因为在这个类中,我们不需要构造函数(只是对MoiveClip一个扩展),所以这个命名可以随意。
代码拷贝框
class JC_MCExtend extends MovieClip //用extends来继承MovieClip类
{
//绘制坐标轴(简易)
function drawRF()
{
this.lineStyle(1,0x000000,100);
this.moveTo(Stage.width/2,0);
this.lineTo(Stage.width/2,Stage.height);
this.moveTo(0,Stage.height/2);
this.lineTo(Stage.width,Stage.height/2);
}
//绘制正弦函数 y=A*Sin(B*x+C)+D 的函数图像
function drawFunc(startX:Number,endX:Number,A:Number,B:Number,C:Number,D:Number)
{
this.moveTo(Stage.width/2+startX,Stage.height/2-(A*Math.sin(0.1*B*startX+C)+D));
this.lineStyle(1,0xff0000,100);
for(var x=startX;x
[Ctrl+A 全部选择 然后拷贝]
我想上面有关绘制的部分就不用解释了,都是MX的语法,值得注意的是参数的声明,
格式为“参数名:参数类型”,虽然麻烦,但大家一定要习惯才行。
接下来该是FLA的部分了,新建一个Flash文档,命名为testMCExtend.fla。
首先,要让Flash知道你的Class文件所在的路径,
在文件-发布设置-Flash选项卡中,选中AS2.0,并在后面的Settings设置中添加你的JC_MCExtend.as所在路径。
回到场景中,在库中新建一个MC,命名为:draw。
在库中右键点击这个MC,选择Linkage,做如图所示的设置

在时间轴第一桢,加入如下AS:
?
?

源文件下载
作者:花火§火花
?
新建一个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 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;
}
}
}
[Ctrl+A 全部选择 然后拷贝]
然后建立一个fla,在里面建立一个MovieClip,比如汽车等要移动的物体.
Ctrl+L.调出库,点这个MC,按右键,选择Linkage,用于把这个MC扩展
成CLASS类.
如图所示进行设置:


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

现在我们在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写成自己专用的控制引擎.
示例地址
[url=http://www.blueidea.com/articleimg/2003/09/736/JC_MCExtend.zip][/url]
源文件下载
[url=http://www.blueidea.com/articleimg/2003/09/736/JC_MCExtend.zip][/url]
_root.attachMovie("draw","draw_mc",0);
//绘制坐标轴
draw_mc.drawRF();
//绘制函数 y=30*Sin(x+PI/2)的函数图
draw_mc.drawFunc(-100,100,30,1,Math.PI/2,0);
本文转自:http://www.5uflash.com/flashjiaocheng/Flashaschengxu/260.html