作者相關(guān),轉(zhuǎn)載請保留:http://as3blog.com/as3/as3tip-new-philosophy/
對(duì)于AS1、AS2的開發(fā)模式來說,靈活是最大的優(yōu)勢。然而,靈活卻造成了不穩(wěn)定、紊亂。這是開發(fā)復(fù)雜的、長久的項(xiàng)目所忌諱的。關(guān)于(AS1/2/1+ 2)靈活輕便與穩(wěn)定持久(AS3)的權(quán)衡,我個(gè)人覺得可以理解為“魚和熊掌不可兼得”,但我希望已經(jīng)習(xí)慣了AS1、AS2的朋友們不要把這個(gè)結(jié)論想得太悲觀。
AS3是純粹面向?qū)ο蟮模啾冗^去的AS2,我認(rèn)為是更加敏捷的?v然有著更多的約束,但在package內(nèi)直接建立多個(gè)輔助類(Helper Class),不失為一個(gè)非常好的消息。就憑這一點(diǎn),我覺得至少與笨拙的AS2相比,AS3的開發(fā)效率就不會(huì)打多大折扣。我們需要的其實(shí)只是語法、習(xí)慣,尤其是觀念的轉(zhuǎn)變而已。當(dāng)然,這需要時(shí)間。我作為一個(gè)AS1/2的長期發(fā)開人員,在轉(zhuǎn)變到AS3的過程之中,也遇到了很多問題和疑惑。但我很樂于與大家分享、交流我所獲得的收獲及觀念轉(zhuǎn)變的心路歷程。
ActionScript編程自它問世的那一天就是多姿多彩的。技術(shù),尤其是Adobe產(chǎn)品線的技術(shù)體系,也絕然不是呆板的“學(xué)究式體系”。我希望我的“羅嗦”能讓您獲得一個(gè)更輕松的心態(tài)。
言歸正傳,先說說我在AS1/2(1+2)轉(zhuǎn)變到AS3時(shí)所遭遇的最大困惑吧:
開局(How, and especially where, to get start) - 玩過星際爭霸的朋友們一定知道,針對(duì)不同的地圖,如Lost Temple 和WCG-groky park(原來WCG有一個(gè)島關(guān),我忘記了),都有各自的經(jīng)典、流行的開局方式。從AS1/2轉(zhuǎn)變到AS3,無非是從Lost Temple 轉(zhuǎn)變到WCG-groky park 的過程,你也許要先采氣礦造空軍,才能順利發(fā)展。
其實(shí)Flash從AS1到AS3,也有各自固定的、流行的開局方式。
對(duì)于習(xí)慣了用AS1編程的人來說,制作一個(gè)Flash的開局是非常靈活的:你一進(jìn)入Flash就有一個(gè)長長時(shí)間軸以供使用。你往往需要一個(gè) loading,你可以用1-5幀先做一個(gè)loading(還記得N年前流行的FlashMTV制作教程么?);你也可以取一幀,放一個(gè)loading的 MovieClip 然后在這個(gè)MovieClip 上寫一個(gè)onEnterFrame 來監(jiān)聽swf 文件加載的進(jìn)度(我熱衷的做法)。接下來,你可以在第二幀或者第N幀部署程序界面。MovieClip 強(qiáng)大的幀API能讓你靈活地完成許多有趣的邏輯(gotoAndPlay、gotoAndStop、 prevFrame等)。編程的時(shí)候也可以很隨意地尋找自己要控制的資源,我現(xiàn)在還記得剛接觸AS的時(shí)候,一個(gè)_root一個(gè)_global,曾經(jīng)讓我屢試不爽。每次遇到問題了就用這兩個(gè)東西解決。
AS2的開局其實(shí)沒有本質(zhì)的變化,至少我是這么認(rèn)為的。唯一的進(jìn)步就是比AS1的OOP,模塊封裝的更加徹底。甚至還有些許退步,比如清一色基于 MovieClip + attachMovie 的模式,仍然容易造成運(yùn)行時(shí)(Run-Time)效率低下,而且開發(fā)起來概念也模糊了。因?yàn)長ibrary中設(shè)置了linkage,new的明明是自己的Class,attach的還是MovieClip。
于是很多人采用AS1+2的方式,這也是我所喜歡的,F(xiàn)在想起來,還是比較靈活快速的。然而在AS3中,你卻仿佛陷入一片黑暗。FlexBuilder 沒有時(shí)間軸。即便用“似曾相識(shí)”的FlashCS3的IDE開發(fā),AS3 也不支持 MovieClip和Button上的代碼。寫在幀上也無法簡單地使用“onRelease=function”了。上網(wǎng)搜教程,往往得到如下寫法:
aw.addEventListener("click",fun); function fun(e:Event){trace(1);}
實(shí)在讓習(xí)慣了AS1、2的朋友們郁悶。一方面看到人家用AS3設(shè)計(jì)出來的精彩demo 羨慕不已,一方面又對(duì)程序入口摸不著邊際。這種尷尬我想不是看一兩篇教程就能解決的。
我們需要“洗心革面”,我們需要“忘記過去”(try to forget the past)。大膽地告訴自己,onRelease=function不僅已經(jīng)被“殺死”,而且根本就不是好的寫法,哪怕你仍然覺得它看起來那么順眼。大膽地告訴自己,AS3中,所有的變量、函數(shù)都屬于類(對(duì)象的屬性和方法),而不再屬于時(shí)間軸、幀,哪怕上面列舉的兩行代碼也可以寫在時(shí)間軸上生效。
我個(gè)人建議,傳統(tǒng)AS1/2的程序員從Flash CS3 IDE入手AS3,比較合適。因?yàn)镕lash CS3的入口(開局)非常明確:Document Class(文檔類)。
運(yùn)行FlashCS3,打開fla文件,在IDE下面屬性面板中,找到“Document Class”,填入一個(gè)名字(由于是類名,最好是首字母大寫,比如MyMainClass)。然后在fla文件所在的文件夾下面建立同名的as文件。當(dāng)然,也可以把fla 和類文件全部分離,這就需要設(shè)定類路徑(File-Publish Settings-ActionScript version:Settings)。下面可以輸入類路徑。我個(gè)人建議輸入相對(duì)路徑。相對(duì),意即相對(duì)當(dāng)前的fla文件;路徑,即我們電腦文件系統(tǒng)中的文件夾。不寫死“x:\xxx”是為了讓項(xiàng)目可以在不同的環(huán)境上運(yùn)行,也可以更好的支持多人開發(fā)。相對(duì)路徑的寫法就是用“.”表示當(dāng)前路徑,用“..”表示上一級(jí)路徑。比如可以寫: “./classes/”或者“../classes/”。
這里再補(bǔ)充說明一下,我的建議是把原文件放在一起,輸出的swf放在別的目錄(通常叫做“bin”)。輸出目錄在剛才面板中的“format”標(biāo)簽下,可以把原文件放到目錄“src”中,然后把swf格式的file名設(shè)置為“../bin/somefile.swf”,建議只輸出swf。HTML還是自己寫的好。
別看我羅嗦了這么多篇幅講這些設(shè)置,但它們真的對(duì)于規(guī)范你的開發(fā)習(xí)慣和開發(fā)觀念有好處。讓你潛移默化的接受AS3的Philosophy中的“分離”思想。
經(jīng)典論壇討論: http://bbs.blueidea.com/thread-2744560-1-1.html
出處:藍(lán)色理想
責(zé)任編輯:elesa
上一頁 下一頁 從AS1/2 到AS3的觀念轉(zhuǎn)變 [2]
◎進(jìn)入論壇Flash專欄版塊參加討論
|