Flash MX 前进一大步(续) ( 原文地址:http://www.devx.com/webdev/reviews/FlashMX/ib030402-3.asp
翻译:starsjz)
开发特性Flash MX 的性能在很多方面有了普遍的提高,提高了ActionScript中控制影片元素的能里,并且拥有了一个贯穿的调试器。
对象和事件任何一个从FLash4到Flash5转变过来的开发者都知道ActionScript曾经在最后的版本中发生了很大的变化,使一个曾经是艺术家使用的简单的小工具变成了一个与媒体相关的广泛丰富的开发工具。随着Flash MX的发布,ActionScript向ECMA-262 (ECMAScript)规则更加靠近了一步,它内建了对Unicode(统一的字符编码标准)的支持、一个新的转换switch statement,严格的等式(===)和不等式(!==)操作符,还有最重要的——真正的对象类和事件句柄。
使用ActionScript的新的对象语法,开发者能够创建自定的类,这要优于以前,不得不受到ActionScript的语法限制。先前创作者只能通过调用外部的对象结构来模拟类,比如通过外部的文件或者影片剪辑。现在,开发者可以设定全局类,可以在任何地方使用它。ActionScript通过一个标准对象来提供了一个对象原型。你可以从一个已经存在的类中继承它的方法,并且super这个新的关键词让你可以调用超类方法或者结构。
因为对象可以是单纯的代码或者是代码和影片剪辑中的媒体元素的结合,Flash MX提供了唯一的方法来使电影剪辑元素或者标准对象类和一个ActionScript 类结合。Object.registerClass()方法用来取得这两个arguments:影片剪辑的联接标识符或者ActionScript类的名字,和类结构。
在底层,注册影片剪辑可能有些问题,但是这个过程是这样的:在库面板里注册一个影片剪辑,,然后为选中的元素选择联接,检测ActionScript选项的导出并提供联接名。已注册的影片剪辑的全部新演示自动的被注册指定的类(清参考http://www.devx.com/webdev/reviews/FlashMX/listing1.asp和http://www.devx.com/webdev/reviews/FlashMX/samples/sample1/index.html。你需要有Flash6的支持才能够看到实例。试用版在这里下载http://www.macromedia.com/support/flash/ts/documents/flashplayer_beta.htm).
ActionScript 提供了灵活的事件句柄来响应对象的事件,比如鼠标单击或者按键事件。Instead of awkwardly attaching individual actions to objects themselves via instance ActionScripts (e.g. onclick), Flash MX exposes event handlers for prototype objects, such as MovieClip and XML. ActionScript can define or override handlers for these events.
ActionScript 中仍旧缺少的ECMA标准特性:try,catch,throw,错误捕捉,实时编译的转换声明,和使用DDT的严格XMl定义。这些限制在即将来到的MX整合应用程序中不会待来太大麻烦,因为
严格的应用程序设计可以与服务器紧密的结合。ActionScript类使处理过量的对象函数和事件句柄成为可能。举个例子,XML的 onData 事件句柄在onLoad事件句柄之前被激活,letting you override the internal XML parser.
组成成分Flash MX扩展了Flash5的SmartClips,使其成为了叫做Components的新对象。SmartClips提供了新方法来巩固联合体成为普通的库元素,比如滚动条和图表。MX 为表单提供了一套基于UI的组件,包括checkbox(检验框), combo box(组合框), push button(按扭), 等等。Scroll Pane一个最有用的UI组件,几乎每一个闪客作家必须手动建立来自动处理一个过程。
组建的参数面板是另一个重要的改进,极大的简化了设计者与开发者的设计过程。举个例子,一个成分地址可能会暴露区域参数。把US参数改变成为UK,不仅可以改变元素的视觉外观,还可以改变基层验证或者行为。组件参数给了设计者一个简洁直观的接口。(参考http://www.devx.com/webdev/reviews/FlashMX/figure5.asp)

大多应用软件用几种方式使用表单元素,Flash MX同样允许设计者轻松的改变UI组件的外壳。在库种找到存放组件外壳的目录,然后编辑所选的元素。开发者应该注意到,新ActionScript接口可以在运行时注册组件外壳。
组件的真正的强大之处在于你可以创建你自己,把他们放置在代码库里,然后将它共享于设计与运行间。不幸的是,Macromedia没有提供任何好的指南或例子,因此学习这一方法会的很困难。
一个组件类似于一个被连接的对象,不过它对设计时的控制和面板的相接有额外的说明。
创建一个组件,需要定义并连接一个影片剪辑元素和额外的图象素材。将一个类的说明放在#initclip .. #endinitclip 之间(这样确保了类只初始化一次)。然后将影片剪辑定义为库中的组件。在组件定义对话框中可以定义组建的参数。属性编辑器允许你定义参数名和约束变量;小心不要混淆了这两者。参数名时显示在属性面板中的,而变量是可变对象的名字,当参数被创建时才被建立。举个例子,一个叫value的参数可能限制着一个叫initValu的类变量,当你创建一个用参数定义的类之后,this.initvalue将返回参数的值。创建一个定制组件请参考列表2
www.devx.com/webdev/reviews/FlashMX/listing2.asp 和 例子2
www.devx.com/webdev/reviews/FlashMX/samples/sample2/index.html。
Flash的联接在数据连接性中Flash MX 提议许多的主要进步。 最引人注目的是在XML语法分析器二十个折层的表现。虽然简单的XML分析比Flash5要慢,但是数据附加在Flash 6中。由于影片在新播放器中装载时性能的提升,曾在Flash 5中发布了联接了XML的影片的创作者将大大的受益。
Flash MX还提供了两个新的客户端方面的联接特性,本地联接和书签。本地联接能使电影断片在将发送消息,数据,或者执行脚本发送到另一台机器上。这一特性可以使Flash影片与Html页面对话,比如一个导航影片和一个导航帮助影片。当用户在选项之间改变时,导航影片可以更新帮助影片,而且对话影片不一定要在相同的窗口里。
动态内容Generator这一工具面板被取消掉了是MX产品的一个重要的变化,通过这个Macromediade的服务器软件包来动态处理进入Flash影片中的图片和其他内容。那些服务将会很快出现在MX版本中。XML和信息端口在Flash5中可以传输实时动态的数据和文本,到了Flash MX,增加了动态能力,包括图象(JPEG)和声音(MP3)的实时联接。动态资源使用起来很简单:仅仅使用loadMovie() 和 loadSound()方法就可以实现。许多的开发者因为Flash5不能动态装载图象,只好手动创建JPEG或者MP3格式的.swf包。(参考http://www.devx.com/webdev/reviews/FlashMX/listing3.asp和http://www.devx.com/webdev/reviews/FlashMX/samples/sample3/index.html)。这个特性对流式的音乐式格外的有用(Sound.loadSound()函数中的第2个参数指明了音乐是否流式的)。以前,声音必须附加在库里或者直接拖到时间线里边。
这一技术上的变革将大大的进化Flash平台,甚至全部的MX产品。在一个HTML页里,可以加载不同的元素成为一个整体,Flash缺少这一协议,但是现在不同了。请参考这里http://www.devx.com/webdev/reviews/FlashMX/figure6.asp
其他特性做过大型Flash站点的人一定知道Flash缺少了通过浏览器的历史工具来导航的能力,这一简单的功能不能使用。但是现在,在Flash MX中,作者可以在任何一帧中加入锚点,或者通过IDE在影片开头来自动加入锚点。这样就用户可以使用浏览器中的前进后退按扭来访问Flash了。这个例子http://www.devx.com/webdev/reviews/FlashMX/samples/sample4/index.html给出了一个利用锚点的简单演示。
Flash MX提供了一个ActionScript API,因此你可以使用新的MovieClip对象方法直接在舞台上绘制矢量图形。开发者能够线,曲线,填充,和gradient方法来做矢量图。这一特性可以使作者实时的看到矢量图形的绘制,就想表格和图象一样。这个版本和以后版本中的附加特性还包括了蒙板和外部媒体设备的支持,提高了对PocketPC(手掌机)的支持,loadVariables()的一个event-savvy object-based接口,和听众可以激或简单事件的响应(比如鼠标单击事件).