ActionScript3 视觉编程精要

  ActionScript3 Display Programming 的内容是关于如何使用ActionScript3 来生成和控制各种图形、动画、视频等可视元素。这些可视元素通常在Flash Player的stage(舞台)上显示。这些可视元素又称为显示对象(Display Object)。

1、什么是显示对象(Display Object)
  显示对象,其准确的含义是可在舞台上显示的对象。可以显示的对象,既包括可直接看见的图形,文字,视频,图片等,也包括不能看见但却真实存在的显示对象容器(Display Object Container)。

  从ActionScript3的角度来看,不管多复杂的视觉图形都是由显示对象和显示对象容器组合而成的。

  那么它们是如何组合而成的呢?这儿举一个Flash例子,在此例中,有一块黑板,黑板上有几个字,黑板前面放着一盒粉笔和一只单独拿出来的粉笔。

  在这个Flash中包含着一些显而易见的逻辑。比如,当我们移动黑板时,自然希望黑板上的字也要一块儿动。同理,盒子移动时,盒中的粉笔也会一起移动。那么毫无疑问,黑板和字要属于一组,盒子和粉笔属于一组。这样,我们可把一组组的显示对象,看成由一个个看不见的容器装着。这些显示对象,就被看成这个容器的子对象。容器一动,它装的子对象都会动。若改变一下容器的透明度,其所有子显示对象也会同样变化。考虑一些显示对象是否属于一个容器,不仅要考虑这些自然逻辑,更重要的是考虑程序自有的逻辑。比如,如果这个flash有一个额外要求,盒中粉笔需要一起消失,一起出现,那么也可以将这些粉笔设计在一组中。

  那么,一个复杂的图形,怎样用ActionScript3语言来描述呢?和所有复杂的事物一样,这些复杂图形被解构成一种等级结构。

1.1、ActionScript3中显示对象等级结构

  以Flash文件(SWF文件)为例,一个ActionScript3应用程序包含的可视内容被解构成一个统一的视觉等级结构。这个等级结构中,包含两大类型的显示对象,除自身以外不能包括其他显示对象,简称为非容器对象。

  如果把这个等级结构看成一个树状结构,那么容器就是树枝,非容器对象就是树叶。与其他语言对比,ActionScript3的显示对象结构模式是典型的合成模式(Composite)。准确的说,是安全方式型的合成模式,即:只有容器才拥有管理子对象的方法,非容器对象没有管理子对象的方法。父容器可通过getChild()、getChildAt()等方法访问每一个子对象,每一个子对象都可以通过parent属性访问到父容器,所以ActionScript3的显示对象结构又是一个双向的树图。

  首先,在这个等级结构的最上层,就是舞台(Stage)。舞台是最根本的容器,包含着当期SWF所有的显示对象。舞台又是一种特殊的容器,每个Flash应用程序只能有一个舞台容器。其次, 在舞台下面的也是一个容器,被称为当前SWF主类的实例。在ActionScript3中,每个SWF都和一个ActionScript3类相关联。这个类就称为SWF的主类。当这个SWF设定了文档类(Document Class),那么文档类就成了主类;如果是由Flash CS3生成的且没有指定文档类,那么莫然的MainTimeline类就是主类。然后,才到了Flash的内容部分。这Flash中的内容无非由两个容器和一个显示对象组成。每个容器又有自己的显示对象或者容器。
1.2、显示对象的类库架构
  以下是18个常见显示对象类的继承关系图。
  类图的核心是3个抽象类:DisplayObject、InteractiveObject、DisplayObjectContainer。
  这3个抽象类反应了”一个统一、两个层次“的架构脉络。
  一个统一是指,所有显示对象都统一于DisplayObject类。所有显示对象(包括容器)都是其子类的实例。
  两个层次,第一大层次:是否可以接收互动事件?可以接受的,称为可互动的显示对象(InteractiveObject)。不可接受的,称为非互动显示对象。所谓接受互动事件,是指能够接受鼠标单击、键盘敲击等人机交互事件。单纯的矢量图形、位图、视频都是不可接受这些事件的,那么就归于非互动显示对象这一类。如按钮、MovieClip、UI组件、文本框可以接受的,就归于可互动的显示对象。第二大层次:是否可以容纳其他显示对象?意思就是,可否将其他显示对象纳为自己的子对象。可以容纳其他显示内容的,称为显示对象容器(Display Object Container);不可容纳其他显示对象的,称为非容器显示对象。
posted on 2013-09-06 11:41  青山隐隐,绿水迢迢  阅读(544)  评论(0编辑  收藏  举报