Flash 类绑定机制研究与应用
摘要:文章分析了 Flash 类绑定的基本原理,探讨了类绑定的几种方式和优缺点,并通
过代码演示了类绑定的技巧,总结出在
RIA 项目开发中,采用类绑定是美工和代码分离的
重要途径,既保证了界面友好和代码逻辑完整,也可以提高整个开发效率。
关键词:
Flash;类绑定;代码;元件
当前,互联网带宽不断提高,各类
RIA 层出不穷,在应用中融入更多的交互式动画元
素显得越来越重要。交互式动画需要解决美工元素和控制代码相互配合的问题,不仅要求界
面友好带给人们愉快的视觉享受,同时要做到所执行的代码逻辑完整,与显示对象完美结
合。在
Flash 创作工具中,类绑定是实现动画和脚本相结合的主要方法,采用类和库中的元
件绑定是目前业界标准的通用做法,可以使动画中的影片剪辑具有像程序一样的模块功能。
一旦某个影片剪辑与类绑定后,该剪辑将被视为类的实例,影片中的子显示对象和帧都可
以被类定义中的代码控制。从应用层面看,一个类不仅可以与多个库元件绑定,实现代码集
中管理,同时,一个元件也可以重复绑定多个不同的类,实现不同阶段的不同显示效果;
从项目层面看,类绑定使得设计人员和脚本开发人员可以相对独立的专注于自己的工作,
减轻双方劳动量,提高工作效率。
1 类绑定的原理
从
Flash CS3 引入了 ActionScript3.0 后,库中的元件都被看成是某个类的实例,即影片
剪辑与某个
MovieClip 子类进行了绑定。即使没有指定具体绑定类,编译系统也会自动生成
一个
MovieClip 类与之绑定。其原理为,如果影片剪辑类元件在满足没有指定绑定类,帧中
没有加入脚本,没有手工输入子元件的
name 属性的条件下下,编译器就将该元件作为一
个普通的
MovieClip 对象进行编译;如果不符合上述条件编译器则自动生成一个 MovieClip
子类,将舞台上的剪辑元件编译成该类的实例。该类的类名默认为
“文档名::库元件名_数
字
”。例如:某文档命名为“示例文档.fla”,在其中新建一个影片剪辑类元件“示例剪辑”,“示
例剪辑
”的任意帧中包含代码“stop()”,那么编译器会将舞台上的该剪辑编译成“示例文档::
示例剪辑
_数字”类的实例,而“示例剪辑_数字”类是继承自 MovieClip 的子类。此外,不仅
可以绑定库中的元件,整个舞台(
stage)甚至 SWF 文件也可以实现类绑定,这是因为可以
把
flash 中的舞台看成是一个大的容器对象,而事实上舞台容器也是显示列表中的根容器,
舞台容器被看成是
Stage 类的实例。SWF 文件可以被看成 SWF 主类的实例,当类绑定 SWF
文件时,类被称为文档类,文档类是类绑定的一个特例。如果
SWF 没有指定文档类,那么
编译器会自动生成一个
MainTimeLine 的类与之绑定。如果设计元素是交互动画的外壳,那
么类绑定则赋予其灵魂。
在
Flash 创作工具中,即可以将动作脚本写入影片剪辑的关键帧中,也可以写在绑定
类中。那么,帧代码和绑定类的适用范围是什么呢?一般来讲,应遵循以下原则,凡是和影
片结构、播放流程相关的代码都应写在关键帧中,而与影片结构无关的代码写在绑定类中。
当然,在实际应用中要灵活处理,例如,在某绑定类绑定多个影片剪辑的时候,要求所有
的剪辑播放到一定帧的时候都执行共同的播放控制类代码,这时候就应将代码写入绑定类,
通过代码对不同剪辑实现统一管理,因为这是绑定类的通用要求,并不针对某一特定影片
剪辑。
在
Flash CS3 及以上版本中,库中创建的原件一般默认为基于 MovieClip 类。但是如果
一个影片剪辑类元件只有一帧而不需要时间轴播放支持,则没有必要使用
MovieClip 类,
可以采用更轻量级的
Sprite 类,这样做的好处在于不但节省资源,还可以使代码意图更加
明显。具体做法为,右键单击库中的元件,选择属性,在弹出的对话框中勾选
“为