17,一个文件中的多个类
一般来说,一个.as文件中就一个类,但是在AS3中,现在允许在一个文件中定义多个类用来辅助主类。
在.as文件中的辅助类,必须定义在类包以外,并且只针对此文件中的主类和其他辅助类可见。
例如:
package {
class MyClass {
function MyClass() {
var helper:MyHelper = new MyHelper();
}
}
}
class MyHelper {
function MyHelper() {
var helper:HelpersHelper = new HelpersHelper();
}
}
class HelpersHelper {
function HelpersHelper () {
}
}
14,SimpleButton实例
AS3现在有一个新的类:SimpleButton(flash.display.SimpleButton)。这个类允许你通过AS创建一个按钮。
var myButton:SimpleButton = new SimpleButton();
SimpleButton类有4个属性分别代表按钮的四个不同状态:upState,overState,downState和hitAreaState。你可以为每一个状态创建一个新的显示对象,然后将显示对象赋予SimpleButton的各种状态:
myButton.upState = mySprite1;
myButton.overState = mySprite2;
myButton.downState = mySprite3;
myButton.hitAreaState = mySprite4;
12,标签申明
在AS3中引入了标签,新的标签可以和循环体一起使用。例如,现在有两个嵌套的循环体,如果想要在内循环体中break掉外循环,一般使用下面的方法:
var i:Number;
var j:Number;
var exit:Boolean = false;
for (i=0; i<10; i++) {
for (j=0; j<10; j++) {
if (i > 3 && j > 3) {
exit = true;
break;
}
}
if (exit) {
break;
}
}
在引入了新的标签以后,可以使用下面的方法从内循环体中直接break掉外循环体:
var i:Number;
var j:Number;
mainLoop: for (i=0; i<10; i++) {
for (j=0; j<10; j++) {
if (i > 3 && j > 3) {
break mainLoop;
}
}
}
10,delete关键字和类成员
delete关键字在Flash中是用来删除定义的变量,但是并不将对象从内存中清除掉(这是垃圾收集器的工作)。它只是将一个变量的引用设置成无效,让内存中的这个对象无法再被引用和使用,也无法再使用for in来枚举。
事实上,垃圾处理器(GC)将在特定的时候,自动的从内存中删除那些不再被引用和使用的变量。比如,你创建了两个对象引用A和B,都指向了对对象ObjectX的引用,如果delete了A,并不会让垃圾收集器把ObjectX从内存中删除,因为B的引用还是指向了这个对象。如果将A和B都delete,则不再有对ObjectX的引用,ObjectX也将被垃圾收集器回收。例如:
var a:Object = new Object();
var b:Object = a; // b和a引用同一个new Object();
delete a;
trace(b); // 输出[object Object] – 在内存中还是存在
delete b;
// GC将回收object
类型转换和as操作符
AS允许在需要的时候,将对象的类型改成另外一种匹配的类型,这就是类型转换。AS2和AS3都支持通过像“type(object)”这样的方式进行类型转换。例如,现定义一个数据类型为Object,你可以通过使用类型名称的语法将这个数据转换成另外一种数据类型。如:
var obj:Object = getMyCustomObject();
vay customObj:MyClass = MyClass(obj);
AS3引入了一种新的操作符“as”来进行类型转换。as操作符代替了类型名称语法来改变对象的数据类型。如:
var obj:Object = getMyCustomObject();
vay customObj:MyClass = obj as MyClass;
4,新的变量类型
AS3中有许多新的数据类型。其中有些类型是以前没有出现的。AS3中的基本数据类型如下:
简单数据类型:
Boolean
int
null
Number
String
uint
undefined
复杂数据类型:
Object
Array
Date
Error
Function
RegExp
XML
XMLList
新的数据类型通过类来定义,例如: Matrix (flash.geom.Matrix)
Shape (flash.display.Shape)URLRequest (flash.net.URLRequest)
等等。
动态修改影片的帧频
在AS3中,你可以使用Stage类动态的修改影片的帧频。
Stage类(flash.display.Stage)的stage对象是所有的sprite和MovieClip以及其他在安全沙箱里的所有元件的舞台。stage对象的帧频可以是0.01到1000之间的任何一个数。要修改帧频,使用下面的代码:
// 将帧频修改到12帧每秒(FPS)
stage.frameRate = 12;
类方法的作用域和类绑定在一起
AS3完全基于类构造。当一个类被创建的时候,类中的参数,变量,方法或任何实例都同时被创建。和AS2不同,AS3中的方法在执行的时候,将使用和类同样的作用域。例如下面的代码:
package {
import flash.display.Sprite;