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的显示对象结构又是一个双向的树图。