更新时间:2022-09-16 21:13:33
一、类的继承
类的继承是类的一个重要用法。使用继承,我们可以重复利用基类中的代码,而不必重写代码。我们可以继承AS自带的类,如event等,也可以继承我们自定义的类。
下面,我们将写一个新的as脚本,继承上篇的circle.as。
(1) 我们在area文件夹下,新建一个名为square.as的as文件,填入代码如下:
package area {
public class square extends circle {
public function info() {
trace("类的继承");
}
}
}
(2) 我们回到上层目录,打开new.fla文件,修改代码如下:
var s:square = new square();
trace(s.getarea()); //输出:基类中圆的面积
trace(s.info()); //输出:子类中info函数的trace语句
继承类使用的是extends方法,参见示例。由示例可见,继承的两个最大作用为:1.使用基类的代码。2.新增自己的代码。
二、覆盖“基类的方法”
如上例,我们继承了类后,希望输出的面积是新的面积公式,并且还是想使用getarea()方法,但该方法已经被占用,怎么办?没关系,我们可以覆盖基类的该方法。我们修改square.as的代码如下:
package area {
public class square extends circle {
private var side:uint = 5;
override public function getarea() {
return side * side;
}
}
}
打开new.fla,运行如下代码:
var c:circle = new circle();
var s:square = new square();
trace(c.getarea()); //输出:圆的面积
trace(s.getarea()); //输出:正方形面积
覆盖类使用的是override方法,参见示例。但是在覆盖类的时候,有以下几点限制:
(1) 覆盖方法和基类方法的控制权限必须相同
(2) 覆盖方法和基类方法传递的参数数量和参数类型必须相同(参数名称可以不同)
(3) 覆盖方法和基类方法返回值的数据类型必须相同
三、get和set存储器方法
让我们先来看两个例子:
例1:
public class circle {
public var _msg:String = "测试字符串";
}
例2:
public class circle {
private var msg:String = "测试字符串";
public function get _msg():String { //get存储器
return msg;
}
public function set _msg(str:String):void { //set存储器
msg = str;
}
}
例1在类体内定义了一个public的string变量。
例2在类体内定义了一个private的string变量,然后通过get存储器控制变量值的读取,用set存储器控制变量值的修改。
然后我们在Fla文件中,均可以运行以下语句:
var c:circle = new circle();
trace(c._msg);
c._msg = "新的字符串";
trace(c._msg);
可以看到,两者的效果是相同的。
既然这样,为什么还要使用get和set存储器呢?他们的作用是什么呢?
(1) 使用例1,我们必须同时开放读权限和写权限。而使用get和set存储器,我们可以实现有选择的开放读权限和写权限。
(2) 我们可以在get和set存储器中添加语句,在不改变变量本身的同时做一些处理。
比如:return (msg+5),类似这样的语句。
(3) 扩展子类的时候,例1方式中的_msg是不可以被覆盖的(只能覆盖方法),但例2中,可以覆盖get和set存储器。
如果你不需要用到上面这3种情况,那么我建议还是用例1的方式来实现。简洁多了,还不容易出错!
四、嵌入资源类
有时候我们可能会需要往Flash文件里嵌入一些资源,如MP3、视频、图像、字体等。嵌入资源的好处是,可以确保当需要的时候立即能用。缺点是,会增加生成的swf文件大小(因为是把资源直接放入到生成的swf文件里了)。
什么样的资源适合嵌入呢?我的建议是,文件体积不大,但使用频繁,或者对使用的即时性要求比较高的资源,可以考虑嵌入。比如我们做一个枪战的游戏,那么发射子弹时“嘭”的声音,嵌入到文件是合适的选择。当然,这个不可以一概而论,需要根据实际情况做决定。
下面我以嵌入和播放MP3为例,简单介绍下怎么嵌入资源和使用嵌入的资源:
(1) 首先,将mp3导入到库,如下图所示:
(2) 在库里,右键点击刚加载的mp3,选择“链接”,如下图:
(3) 自己取一个合适的类名,注意也不要用到Flash的关键字哦,如下图所示:
(4) 在Flash的第一帧写入代码如下:
var mp3:dance = new dance();
mp3.play();
运行下,是否听到导入的声音了呢 :)
类的用法就先讲到这里了。如果你全部弄明白的话,那么一般的类的用法应该都会了。接下来,就要看你自己的发挥,把类用到实处了。呵呵!