AS3中事件对象(Event objects)地位提高了,每一类事件对象都有属于自己的类,最常用的是:用于一般事件的Event类(flash.events.Event)和与鼠标事件相关的MouseEvent类(flash.events.MouseEvent),当然在flash.events package里还有其它的一些事件类,它们都是从Event类继承的.
我们在使用Event.eventDispatcher()时,要广播的事件类型被定义在要用到的Event实例中,举个例子说,要广播enterFrame事件,需要用dispatchEvent一个带有enterFrame事件的Event实例.
dispatchEvent(new Event(\
事件处理器做为事件的结果来执行,事件对象做为处理器函数的一个简单的参数,事件对象的一些属性可以在事件发生时得到,如事件的类型.
addEventListener(\dispatchEvent(new Event(\...
private function eventHandler(event:Event):void { trace(event.type); // enterFrame; }
事件类型都是string,不过Flash中的大多数一般事件类型可以用Event类中的静态变量表示,如enterFrame事件用Event.ENTER_FRAME表示,鼠标事件用MouseEvent类中的静态变量表示,如:click事件可以用MouseEvent.CLICK表示
addEventListener(Event.ENTER_FRAME, eventHandler); dispatchEvent(new Event(Event.ENTER_FRAME));
如果要使用自定义事件,可以为Event对象添加一个自己定义的事件,也可以扩展扩展Event类来实现.
28. 把xml写在脚本中
AS3中可以在脚本中定义XML变量.不必像在AS1和AS2时那样把它们封套在字符串中,AS3的编译器会自动识别和处理脚本中的XML.
var myXML= new XML(\
var myXml:XML =
text1
text2
26
;
29.判断实例所属类及其超类 30.任意放置super()函数 31. 命名当前帧标签 32.trace()有多个参数 ??..
29.判断实例所属类及其超类
AS3中使用一个新的函数getQualifiedClassName(flash.utils.getQualifiedClassName) 可以很容易的得到任何实例所属的类名.例如:
var sprite:Sprite = new Sprite();
trace(getQualifiedClassName(sprite)); // \
用getQualifiedSuperClassName(flash.utils.getQualifedSuperclassName)得到实例的超类.
trace(getQualifiedSuperclassName(sprite)); // \
相反地,使用getDefinitionByName(flash.utils.getDefinitionByName)可以用一串字符表示一个类.
trace(getDefinitionByName(\
30.任意放置super()函数
在AS2中,如果您没有将对 super() 的调用放入子类的构造函数中,则编译器将自动生成对其直接超类的构造函数的调用,并将此作为该函数的第一个语句。
在AS3中,同AS2一样,如果您没有将对 super() 的调用放入子类的构造函数中,编译器同样会自动生成对其接超类的构造函数的调用,不同的是现在可以将对 super() 的调用放在构造函数中任意位置,不仅仅如AS2时那样放在第一句.
package {
public class SubClass extends SuperClass { protected var value:int;
public function SubClass(value:int = 0) { this.value = value;
super(20);//not only the first statement } } }
31. 命名当前帧标签
AS3中MovieClip实例增加两个新的属性 currentLabels和currentLabel.
27
currentLabels 表示FrameLabel对象的数组,FrameLabel对象用来描述影片剪辑时间轴上的帧标签,它有两个属性name和frame,name属性返回代码所在帧的标签名,frame返回所在帧的序号.
currentLabel返回当前帧的标签名.
var label:String = my_mc.currentLabel;
32.trace()有多个参数
我们使用trace()在Flash的输出面板中输出信息,在AS1/2中trace()输出一个参数,而在AS3中可以输出任意个参数了.
注:以前做加载测试时同时输出loaded和total两个变量,还有在中间加一个空字符串.真是麻烦呀.
trace(loaded+\//or
trace([loaded,total]);
现在好了:
var d:Number=78454; var s:String=\var b:Boolean=false; trace(d,s,b);
//output 78454 adfsaffe false
当然如果你要和以前一样也是可以的,使用数组可以做到.
trace([d,s,b]);
//the same output 78454 adfsaffe false
33.将事件处理器作为普通函数调用 34.URLRequest对象代替URL字符串 35.XML和XMLDocument
36.使用URLLoader加载文本和xml文件 37.RegExp:Email确认
33.将事件处理器作为普通函数调用
AS3中我们定义事件处理器时需要用事件对象作参数,当事件发生时,调用对应的事件处理器,事件对象被传递给了事件处理器.
如果把事件处理器作为一般的函数调用也是可行的,如下边这样:
myHandler(new Event(someEventType));
但是,这样就会出现一些问题,(你创建的Event对象与函数没有任何关系的).如果既要事
28
件处理器在作一般函数调用时不用担心Event对象参数,又能在事件发生时正常调用,可以给Event对象参数设置一个缺省值null.
public function myHandler(event:Event = null):void {...} ...
// call normally without event myHandler();
34.URLRequest对象代替URL字符串
AS3中所有与URL有关的函数都使用URLRequest对象代替直接的URL字符串,URLRequest对象包括下列属性:
* contentType:String * data:Object * method:String
* requestHeaders:Array * url:String
URLRequest对象的url属性决定着指向的URL. 举个例子,AS2中用getURL()函数来转向网页,而在AS3中用另外一个函数navigateToURL()(< a href=http://livedocs.macromedia.com/flex/2/langref/flash/net/package.html#navigateToURL()>flash.net.navigateToURL)替代了它.这个新函数的参数使用URLRequest对象代替原来getURL()的字符串.
var request:URLRequest = new URLRequest(\navigateToURL(request);//getURL() replacement
trace(request.url)//output \
35.XML和XMLDocument
AS3.0中的XML类有了很大的变化,采用新的基于E4X标准的处理XML的方法.还提供了一套更有效率的接口,来处理XML结点(nodes)和属性(attributes),放在XML类中(顶级类 top class).
var myXML:XML = new XML(objectToConvert);
var myXML:XML =
as1/as2时代的XML类,在as3中仍然支持,但是已经改名为XMLDocument(flash.xml.XMLDocument).
当然,如果你要在as3中像as1/as2时那样处理XML,使用XMLDocument就可以了.
var myXML:XMLDocument = new XMLDocument(
29
36.使用URLLoader加载文本或xml文件
以前,我们使用loadVars类和XML类加载外部的文本和xml文件,在as3中只要一个类就能实现这两个类的功能了-URLLoader类(flash.net.URLLoader),这个类和loadVars类相似,不同的是它还用来加载外部的XML文件,因为XML类的加载功能已经被去除(removed)了.现在,你可以用URLLoader类加载一断文本,然后把文本交给XML对象处理.
和loadVars一样,URLLoader也用load()方法来加载外部文件,这个方法有一个参数-URLRequest对象,不再是以前的URL字符串,你可以用URLLoader的事件来判断什么时候加载完了,加载完成后被加载的文本可以通过URLLoader的data属性来访问.
var loader:URLLoader; // ...
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, xmlLoaded);
var request:URLRequest = new URLRequest(\loader.load(request); //...
function xmlLoaded(event:Event):void { var myXML:XML = new XML(loader.data); //... }
37.RegExp:Email确认
一个使用as3的Regular Expression类(RegExp)的例子:
function isValidEmail(email:String):Boolean {
var emailExpression:RegExp = /^[a-z][\\w.-]+@\\w[\\w.-]+\\.[\\w.-]*[a-z][a-z]$/i return emailExpression.test(email); } //...
trace(isValidEmail(\trace(isValidEmail(\trace(isValidEmail(\
trace(isValidEmail(\
38.is 运算符(对比instanceof) 39.时间线和类关联 40.Render事件
41.XML中表示属性的操作的运算符@ 42.支持事件传递
43.得到音频的波谱信息 44.Number()的变化
30