切入正题,我们逐步开局:
一、建立文档类(Document Class)
现在我们可以开始建立Document Class了。Flash CS3方便地提供了一个“编辑图标”,你可以方便地打开类文件。回忆一下,上一篇文章提到关于类的书写:每一个类都应该在一个package中。我个人的理解,觉得Document Class 应该在一个单独的、无具体名称的“generic”package中,即:
package { import flash.display.Sprite; public class MyMainClass extends Sprite { public function MyMainClass() { init(); } private function init() { // do sth } } } // We can even use some help classes class MyMainClassHelper{}
这里,我们就成功“开局”了。 注意,这个文档类必须为public 的。而辅助类则不能定义为public、private 的,必须是internal 的。文档类必须继承自Sprite 或者MovieClip。因为这个文档类代表了这个swf,显然swf 是一个需要在屏幕上渲染显示(flash.display.DisplayObject)并提供资源承载能力(flash.display.InteractiveObject)的基础容器。
二、逻辑开局(Initialize the logic)
我们所有的逻辑入口都是从这个类的构造函数开始的。AS3的loading有一些麻烦,我们暂时跳过(稍后会介绍)。
构造函数一般要保持简洁,不妨用流行的init 方式开局,即在构造函数内调用一个init 函数。记住一点,AS3中,“_root”已死,这里就是传统意义上的“_root”了。你看到的这个类(文档类),第一反应应该是这个swf 文件(就如同你原来看到“_root”就应该反应到swf 文件一样)!在这里可以找到原来我们需要的许多资源,例如我们可以找到通过loaderInfo:LoaderInfo 属性(继承自DisplayObject),获取外部参数:xxx.swf ?somevar=1传进来的“somevar”,也可以通过stage:Stage属性(继承自DisplayObject),来进行原来的Stage类的各种操作。我也可以用contextMenu:ContextMenu 属性(继承自InteractiveObject),来控制flash右键菜单的内容。
这一切都在文档类的init以及其他所属方法中进行。所有的其它功能,可以封装成别的类、包进行“模块式”调用。
三、事件机制(The new Event System)
习惯新的事件机制所花的勇气,我认为和开局相当。
我曾经热衷于xxx_mc.onRelease = function(){}的写法,而且做过N多这样的项目。然而当我真正开始用addEventListener 的时候,才发现这是多么优雅的写法。
优雅在哪: 1. 统一:只有addEventListener,没有addListener、没有on(…),代码可以统一地放置。 2. 清晰:事件处理函数作为类的方法(Methods)列举分明,试想一个跟在onXXX后面的赋值函数放在代码当众多难找。 3. 信息翔实、准确:新的事件机制通过传递Event对象让事件的信息完整无漏地传达给接受方;函数(方法)与类绑死,Delegate终于可以光荣退休了。
四、总结
1. 接受新的OOP开发体系:类/对象(class/object)+构造函数(constructor)+成员属性(properties)+成员方法(methods),除了这些东西以外,ActionScript 没有别的存在形式!把时间轴和实例上的代码都忘记吧!
我们要“拥抱”类的概念!AS3中所有的一切围绕着类的概念进行。swf就是一个类,用Flex开发,叫做Application,用CS3,叫做 Document Class(往往继承自Sprite)。任何变量(属性)都属于一个类,MovieClip有成员属性currentScene,它是Scene 类的一个实例;Sprite有成员属性contextMenu和stage,它们继承自DispatchObject 类,分别是ContextMenu 类和 Stage 类的实例。
2. 没有_root,所有的_root 有关的操作,封装到文档类中的成员函数(方法)进行。_root不再是swf 的代表,取而代之的是Document Class(或者Flex中的Application Class)
3. 功能模块化、分离: 不要把所有的事情都塞到文档类中去做,哪怕你可以定义很多辅助类,毕竟独立出来的文件更加便于管理、集成、再使用。而且界面(图形、动画)和代码要分离(事实上AS3的Document Class 和addChild 的内容管理体系帮我们完成了这个操作)。无论你是一个人搞定代码+设计还是有一个团队协作分工编程与动画。分离的好处是让你的功能更加强大和易维护。
经典论坛讨论: http://bbs.blueidea.com/thread-2744560-1-1.html
本文链接:http://www.blueidea.com/tech/multimedia/2007/4704.asp
出处:蓝色理想
责任编辑:elesa
上一页 从AS1/2 到AS3的观念转变 [1] 下一页
◎进入论坛Flash专栏版块参加讨论
|