全面放弃ActionScript2吧

ActionScript1/2(ActionScript2只不过是ActionScript1的“编译时”增强版),自1998年至今,已经存在整整十年了。AS2由于初次将OOP(面向对象)的理念引入Flash开发而“一炮走红”。我还记得在2004年的时候大量关于OOP、AS2的讨论涌现出来,也有许多热心人出了不少好书来解释,比如Luar的《AS2与RIA开发》。然而留给人们更多的是无止境的疑问……

随着RIA产品需求的日益复杂化,AS2的弱点在实际应用中一再爆发:丧失了AS1高效灵活的特性不说,事件处理机制完全是一塌糊涂。要不是Macromedia给出的mx.utils.Delegate和mx.events.EventDispather两个类,估计所有的OOP开发者都要吐血而亡。

今天我就被AS2的事件机制给折磨了整整1个小时:有某类VideoItemList引用若干个来自XML数据支撑的VideoItem类,在VideoItem中有按钮响应事件需要调用外部的JavaScript函数,并传递本类(VideoItem)的唯一标识符。本来可以在VideoItem类中直接完成,但为了将接口“完美地”提供给另一名开发工程师,我不得不将VideoItem类中的onRelease方法代理(Delegate)+广播(Dispatch)出来到VideoItemList中,再作事件广播(Dispatch)。

这下好了,在VideoItemList中addEventListener去“监听”这个事件响应再对外广播。可是,监听到的函数体中的this并不指向VideoItemList类。

我知道肯定有方案可以解决,但我放弃了。我不想把有限而宝贵的时间浪费在这样一个愚昧的ActionScript事件架构上去做无聊的hacking。直接在VideoItem里面进行ExternalInterface去和JavaScript通信,以后再也不做ActionScript2的项目了。

大家一起拥抱ActionScript3吧!

附:给一些抛弃ActionScript2的铁证吧:

以下是我Blog统计到的FlashPlayer9的安装情况,只有不到2%的人使用FlashPlayer8:

即便在教育网这种“角落”(为了某些人某些扯淡的理由,教育网一直不能访问国外网站)8.0也只有3%了:

(数据取样来自华中科技大学BBS白云黄鹤站

抱怨 – Flash8,鸡肋?!

也许是AS3、Flex2一系列新一代的Flash产品跟进的太快,让我对Flash8的印象又“坏”了一点。

今天发现了Flash8的新bug,通过MovieClipLoader过来的图片(jpg、gif等)不能执行_quality="best"操作。 也就是说位图不能实现完美的旋转和缩放。为此Adobe的Flashplayer工程师Tinic Uro采用了一个Bitmap类的小trick应对这个bug(利用Bitmap重写MC)。而Martijn de Visser则将这个trick包装为了一个Firefox直接看源码)。而众所周知,在AS3种,BitmapClass都已经被咔嚓了。

这件小事足以让我对Flash8又失去一丝希望。真不知道现在Flash8/AS2和Flash9/AS3这种犹抱琵琶半遮面的状况要持续多久。总之我感觉Adobe的功课没有做足。
This little trick makes me feel a little more disappoint on Flash8. I think Adobe did not try its best.

Flash8,鸡肋啊,鸡肋!

ActionScript 3.0 VS 2.0 官方详细差别

有一些方法被彻底废除,包括一些8刚加入的函数,如 “loadBitmap”
call() chr() #endinitclip #include #initclip eval() set/getProperty() removeMovieClip() ….

官方地址 HTML本地下载

看了一下MC的新定义,挺庄重的,有点MSDN的味道,我顺便翻译了一下
The MovieClip class inherits from the following classes: Sprite, DisplayObjectContainer, InteractiveObject, DisplayObject, and EventDispatcher. Unlike the Sprite object, a MovieClip object has a Timeline.

The MovieClip class is the base class for Flex components. However, while Macromedia supports some of the MovieClip interface for use in Flex applications, much of the interface has been overridden by Flex. For more information on using the MovieClip class with Continue reading “ActionScript 3.0 VS 2.0 官方详细差别”