完整、準確地把握Flash ActionScript開發的知識體系
——Flash開發用戶入門必讀
[摘 要]
本文明確闡述了在應用Flash ActionScript進行應用程式開發和動畫開發方面的完整知識,整理出了“基於時間軸的應用程式開發”的基本體系,從而使得Flash ActionScript開發過程開始清晰起來。完整闡述了ActionScript開發的基本知識,並糾正了錯誤的觀念,目標是為用戶建立正確的認知。
完整的知識體系總結歸納,為了使用戶能夠將開發建立在合理的符合IT工業標準的基礎之上,我們建立一個邏輯的知識體系,以利於用戶快速、準確、完整地掌握它。
[關鍵字]
基於時間軸的應用程式,完整的知識體系,正確的認知,Flash Player,Flash,IDE,ActionScript,FFC,OOP,RIA,FMS,基本語法,時間軸,影片片段,組件,用戶介面,聲音,視訊,濾鏡,網路,移動設備,即時通訊
[正 文]
很多年來,每一個應用Flash開發的用戶都有一個夙願:那就是如何完整、系統的把握Flash ActionScript應用程式開發的知識體系。
這真的是一個難題……
好在,在黑夜裏不斷的摸索中,在不斷的實踐中,問題逐漸的清晰化,並且理應逐漸的被克服。正如我在前面的文章中所言,夜很長,但天總要亮的……
瞭解和掌握Flash開發的方式
相對過去我們熟悉的開發體驗而言,Flash的開發的確是個怪物。
[1]過去我們熟悉的開發方式
如果你熟悉Visual Basic、Visual C++、Power Builder、Borland C++或者Delphi等等其中的一個,那麼你可能很快就能熟悉其他的幾個,因為它們都是基於表單(Form)的開發方式,這並不困難;如果你熟悉 ASP、JSP、PHP、ASPX等等其中的一個,那麼你也能很快熟悉其他的幾個,因為它們都是基於網頁(webPage)的開發方式。
但是,當來到Flash時卻困惑了,因為這不是過去我們所熟悉的這兩種開發方式中的一種。這導致非常多的開發者(包括我自己)過去很長的一段時間內都在黑夜中摸索,感到的是一個十分陌生的開發環境,這使得Flash開發一直離整個IT開發世界很遠。
三年前,我在拙著中提出了“Flash是基於時間軸的應用程式”的開發體系,三年後的今天,我覺得,我的確應該向大家介紹這一開發體系,因為,這一體系已經非常完整,它已經能夠被貫穿到整個開發過程中,並最終能幫助您快速、完整、準確地把握Flash ActionScript應用程式開發的知識體系。
同時,我也非常樂意向您推薦,在《Flash ActionScript X 開發入門》這本書中,這一知識體系得到了充分的體現。
現在,無論你是Visual Basic、Visual C++、Power Builder、Borland C++、Delphi等的開發者,也無論你是ASP、JSP、PHP、ASPX等網頁的開發者,你完全可以按照你過去曾經熟悉的方式來學習Flash開 發,並遵循這一開發體系,將你的Flash應用融入到整個IT世界,並不見有任何焊接的痕跡。
[2]什麼是“基於時間軸的應用程式”
“Flash是基於時間軸的應用程式”是完整的知識體系,事實上,我個人認為它是目前我所知的“唯一”正確的主線。它如同巨大的磁石將全部的開發體驗吸附到“時間軸”這個看起來如此淺顯而又深刻的“現實”中來。
時間軸的概念對於大多數應用程式開發環境而言是十分陌生的,首先,它看起來僅僅是設計人員感興趣的事,或者是僅僅用於簡單 的動畫。但是,您很快就會發現,時間軸是管理一個應用程式各種狀態的方法,它實際上是一個無價之寶。它可以作為一個Wizard(嚮導),一個表單介面, 或者是一個智慧按鈕,可以根據當前的情況顯示不同的外觀,做出不同的反應。
所有的影片片段也都有獨立的時間軸,每個時間軸或者處於播放狀態,或者處於停止狀態。如果時間軸正在播放,它將一直下去,直到遇到一個stop()命令(一個例外的情況是該時間軸僅包含一幀)。
Flash的設計人員總是使用時間軸來製作動態內容;然而,開發人員總是把影片片段的每個幀停下來,把每個幀用作不同的狀態,甚至,Flash的開發人員在舞臺上純粹使用程式碼建立互動式的動態內容。
“Flash是基於時間軸的應用程式”,理解它,這非常重要。
因為在許多看起來簡單得不可思議、但是又無法準確把握的地方,這一知識體系確發揮了無法置信的效果。例如,在任何應用程式開發中,變數的作用域都是最基本的、也是最重要的認知。如果不能正確地把握這一知識體系,實際上就很難理解變數的作用域。
實際上,在這一問題上,Flash開發人員過去的理解真的很脆弱……
理解“Flash是基於時間軸的應用程式”,當用戶在處理層、層級和深度時,以及在控制狀態時,你才可能將它們之間的關係理清,這在整個開發過程中是彌足寶貴的。
要有正確的ActionScript認知
任何語言都有一定的語法格式,這是用戶首先應該掌握的,並且應該認識到,各種語言之間是相通的,它們之間有很多的相似性: JavaScript與ActionScript很相似。但它們與其它的語言就不很相似了嗎?實際上ActionScript與VB.NET、 C#.NET、JAVA等都有很多相似性,因為它們之間都是相互借鑒的,這就為學習ActionScript帶來了便利。
只要有了基本編程知識的用戶就可以很快地學會ActionScript,但是如果沒有基本的編程知識,那麼就必須從頭開始學習基本語法了,這要稍慢一些,但也非常簡單,因為語法不過就是我們過去小學和中學所學過的加減運算等。
但是,隨後的一些事情給很多用戶帶來了麻煩和錯誤的認知,即使是那些在這一領域中有多年開發經驗的用戶也未能倖免,這真的讓人很憂心。
隨著Flash向開發領域疾速邁進的時候,新的事物也層出不窮。當ActionScript的新版本被正式的命名為2.0後,我並不知道這會為錯誤的認知埋下種子,雖然我知道這並不是“錯誤認知”的理由。
但現在你應正確的認識它們:
ActionScript 1.0和2.0是兩種截然不同的語言,它們之間不存在進化或升級的關係。
一旦瞭解並理解了這一點,實際上你就瞭解了ActionScript幾乎全部的內容,實際上,根據這種理解,你可以將這種關係推廣到ActionScript 3.0。
[1]簡單的邏輯和事實可以幫助你瞭解ActionScript
用戶要學習Flash開發,首先要接觸到的是ActionScript。過去,ActionScript有兩種語言編寫風格,這就 是AS1和AS2。前者遵循的是ECMA-262第3版所制定的規範,而後者遵循的是ECMA-262第4版制定的規範,但它們的實現只有一種,即 Flash Player VM(MM稱為AVM1)。
現在,ActionScript有了第三種語言編寫風格(ActionScript 3.0),而它的實現也增加了一種,這就是AVM2(ActionScript虛擬機第二版),雖然它也內嵌於Flash Player當中,但它與前一個ActionScript實現已有根本不同。
[2]瞭解Flash Player VM也許能幫你理解ActionScript
早在5年前,我提出Flash Player虛擬機概念;5年後的前些天,MM提出AVM(ActionScript虛擬機)。所有的應用皆集於Flash Player,這是每一個Flash的開發人員都應該理解的。
要認識AVM版本間的不同,最好的方法是與微軟CLR做一個對比。主要就是在“實現”上的區別,因為微軟CLR是通用語言運行時,它並沒有為特定的語言編寫風格(C#.NET、JS.NET或者VB.NET)專門定義一個實現。
AVM也與Mozilla的JavaScript實現不同,因為Mozilla有兩種JavaScript實現:但一種實 現使用C完成(也就是眾所周知的SpiderMonkey),另一種實現使用Java完成(也就是眾所周知的Rhino)。它們實現的是同一種語言。
AS2中的面向物件編程(OOP)功能是基於當前正由ECMA TC39-TG1開發的ECMAScript 4草案建議開發的。由於ECMA-4建議尚未成為一個標準,並且仍然在不斷更改,AS2並不嚴格遵循此規範。
AS3(同樣遵循ECMA-262第3版),應該是對AS1的完善,這一完善是十分必要的,有必要解除開發人員對ActionScript的誤解:AS2是對AS1的增強——這種看法是完全的錯誤。但也要提醒用戶注意的是,AS3不會取代AS1。
MM的意圖是很明顯的,它將使Flash Player成為像.NET那樣的CLR,各種風格的開發人員都可以在自己熟悉的環境中編寫程式碼,而在同一個容器中運行,並且可以協同工作。
現在,Flash離這一目標越來越近...................
AS2和AS1最終被編譯成相同的程式碼在同一個虛擬機內運行,而AS3保留了AS2的一些語法特點而增強了AS1,當它被編譯成新的程式碼後在新的虛擬機內運行。
不同的程式師應該選擇自己熟悉的編程風格學習一種ActionScript,另外應該注意的是:ActionScript的版本僅是對創作環境而言,對於Flash Player運行時而言,ActionScript的版本無任何意義。
[3]範例我想是最有說服力的
濾鏡是Flash 8新增的功能,用戶不但可以使用AS2語法來完成,也可以使用AS1來完成。
ActionScript 2.0程式碼:
ActionScript 1.0程式碼:
掌握和善用FFC
目前流行的軟體語言基本都是面向物件的開發語言,面向物件編程(OOP)的核心是應用物件(大多數的語言用“類”來建立和管理物件),Flash(不管是ActionScript 1.0抑或2.0、3.0,它們都)是面向物件的開發體系。
Flash ActionScript提供了若干內建類(各個版本的ActionScript很多內建類的用法是相同的),這些內建類組成了Flash應用的基礎,因 此也被稱為Flash Foundation Class(Flash基礎類,簡稱FFC)。
FFC包括“頂級類”和“Flash專用類”兩部分:
頂級類
頂級類被寫入到Flash Player中。這些頂級類中有一些是基於ECMAScript(ECMA-262)第3版語言規範的,也稱為核心ActionScript類。包括 Array、Boolean、Date、Error、Function、Math、Number、Object、String和System等都是核心 類,它們為應用程式提供了核心功能。
Flash專用類
與頂級類對應的是“Flash專用類”。Flash專用類提供對Flash應用程式外觀和行為的運行時控制,包括Camera、 MovieClip和LoadVars等都是Flash專用類。還有其他一些類被組織到flash.*包(例如flash.display)中。
除了可以使用FFC,用戶還可以自訂類,並且可以擴充現有的FFC,添加新的功能或者修改現有的功能,從而進行更為強大的面向物件編程(OOP)。
雖然有用戶提出ActionScript 1.0無法自訂類,但我並不認為你可以忽略FFC,這結論從前面我們講到的濾鏡範例可以得到。
現在馬上出發
作者邀您訪問他的BLOG:http://zhang-yafei.spaces.live.com
Flash知識體系成員
是完整的知識體系,更是順承一致的知識體系。瞭解知識體系成員:
[2]【完整、準確地把握Flash ActionScript開發的知識體系】
http://cn.zhang-yafei.com/(簡體) (簡體備份)
http://tw.zhang-yafei.com/(繁體) (繁體備份)
要正確地開發萬維網應用程式就必須瞭解《萬維網應用程式開發綱要》:
http://blog.csdn.net/zhang_yafei/archive/2008/06/22/2574348.aspx (簡體)
http://zhang-yafei.spaces.live.com/blog/cns!5358FA09E8EB6188!1047.entry (繁體)
要正確地認識Flash ActionScript 3.0開發,就必須首先閱讀:
張亞飛痛斥連變數作用範圍(域)都不能完整掌握而矇騙雇主和客戶的虛偽的Flash開發者(簡體)
張亞飛痛斥連變數作用範圍(域)都不能完整掌握而矇騙雇主和客戶的虛偽的Flash開發者(繁體)
要完整系統的學習Flash設計和開發,就必須閱讀有關Flash設計和開發的三個基本文件,並在學習過程中最終理解這三個基本檔的內容:
[01]《完整、系統的把握Flash動畫設計的知識體系》
[02]《完整、系統的把握Flash ActionScript開發的知識體系》
[03]《完整、系統的把握Flash動態網站開發的知識體系》
可以通過搜索引擎獲取它們。

