龙图教育:AS3方法和技巧(7)

2020-05-07 09:10

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


龙图教育:AS3方法和技巧(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:深圳黑弧广告-员工手册

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: