[as3][翻译]使用display对象[III]
[摘要]本文包含:处理display对象的事件、选择一个DisplayObject子类
一、处理display对象的事件
DisplayObject类继承自EventDispatcher类。这意味着每个display对象都可以使用事件模型。每个display对象都可以使用它自己的addEventListener()方法——该方法继承自EventDispatcher类——监听特定的事件,唯一的前提条件是监听对象位于该事件流中。
当FlashPlayer发出一个事件对象后,该事件对象开始了从Stage到事件发生的display对象之间的一个往返旅程。比如,如果用户点击了名为child1的display对象,FlashPlayer发出一个事件对象,该对象从Stage出发延display链到达child1。
事件流程可以分为3个阶段,如下图所示:

当使用display对象事件的时候需要注意重要的一点:事件监听者会影响当一个display对象从display链中删除时它是否应该自动从内存中删除(垃圾回收)。如果有对象监听某个display对象的事件,那么当该display对象从display链中删除的时候它不会从内存中删除,因为它依然有到这些监听器的引用。
二、选择一个DisplayObject子类
当使用display对象的时候,你总会需要作出一个重要的抉择:在这么多的display对象中,你要为了什么目的使用哪个display对象。这里有一些知道方针来帮助你决策。这些建议适用于不管是你需要选用一个类的实例还是需要选择一个类来作为你自己写的类的基类:
- 如果你不需要一个对象作为容器来包含其他display对象(也就是说,你仅仅需要一个独立的放在屏幕上的元素),根据用它做什么,选择一个DisplayObject或者InteractiveObject子类:
- TextField用来添加文本
- Video用来显示视频
- Shape用来做在屏幕上绘图。如果你想创建一个实例用来在屏幕上绘图,并且它不被用来作为其他display对象的容器,那么使用Shape比使用Sprite或MovieClip有更好的效果。
- MorphShape、静态文本或简单按钮作为Flash特殊创作的元素。你不能编程创建这些类的实例,但是你可以使用这些数据类型创建变量并引用在Flash创作工具中创建的元素。
- 如果你需要一个变量应用主舞台,用Stage类作为它的数据类型。
- 如果需要一个容器加载外部SWF文件或图片文件,使用Loader实例。加载进来的内容会作为Loader实例的子对象添加到display链中。它的数据类型取决于它加载内容的种类,如下:
- 载入的图片是一个Bitmap实例
- 加载的SWF文件如果是用ActionScript3.0写的,会当作一个Sprite或MovieClip实例(也可能是这些类的子类的一个实例,由创造者指定)。
- 加载进来的SWF文件如果是用ActionScript1.0或2.0写的,会当作一个AVM1Movie实例。
- 如果你需要一个display对象作为其他display对象的容器使用(不管你是否需要使用ActionScript在它上面绘图),选择一个DisplayObjectContainer的子类:
- 如果它只使用ActionScript创建或者作为自定义display对象的基类只使用ActionScript操作,就选用Sprite。
- 如果需要一个变量引用Flash开发工具中创建的一个影片剪辑元件,使用MovieClip
- 如果你创建了一个要关联Flash库中的影片剪辑元件的类,那么选择DisplayObjectContainer子类中的一个作为你的类的基类:
- 如果关联的影片剪辑元件有多帧内容就是用MovieClip
- 如果关联的影片剪辑只有一帧内容就使用Sprite
至此,使用display对象内容翻译完毕!

Leave a Reply