1、flash as2.0 與as3.0的定義php
ActionScript 2.0:其實是as1.0的升級版,首次將OOP(Object Oriented Programming,面向對象的程序設計)引入Flash,但並非徹底面向對象的語言,只是在編譯過程當中支持OOP語法。
ActionScript 3.0:是一個徹底基本OOP的標準化面嚮對象語言,最重要的就是as3.0不是as2.0的簡單升級,而徹底是兩種思想的語言。能夠說,as3.0全面採用了面向對象的思想,而as2.0則仍然停留在面向過程階段,舉個例子,就像VB和C#的感受。在as3.0裏,能夠看到java和c#的影子,確實,這三種語言大部分思想都是一致的,只有一些小的區別,好比as3.0引入了命名空間的概念,可是不支持好比委託,在包封裝及外部訪問上也引入了一些新概念。java
2、AS的發展過程程序員
一、ActionScript 1.0最簡單、最靈活、比較容易理解。既能夠用原始的方式一個個地建立影片、設置對象的事件處理函數,等等。
早期的flash 3中的ActionScript 1.0語法冗長,主要的應用是圍繞着幀的導航和鼠標的交互.這種情況一直保持到flash 5。到flash 5版本時ActionScript已經很象JavaScript了。它提供了很強的功能和爲變量的傳輸提供了點語法。ActionScript同時也變成了一種prototyped(原型)語言,容許相似於在javscript中的簡單的oop功能。這些在隨後的flash mx(6)版本中獲得的加強。正則表達式
二、ActionScript 2.0則相對比較規範,是1.0的升級版。首次將OOP引入FLASH。
Flash MX2004(7)引入了ActionScript 2.0,它帶來了兩大改進:變量的類型檢測和新的class類語法。ActionScript 2.0的變量類型會在編譯時執行強制類型檢測。它意味着當你在發佈或是編譯你的影片時任何指定了類型的變量都會從衆多的代碼中剝離出來,檢查是否與你現有的代碼存在矛盾衝突。若是在編譯過程當中沒有發現衝突,那麼你的swf將會被建立,沒有任何不可理解變量類型的代碼將會運行。儘管這個功能對於flash player的回放來講沒有什麼好處,但對於flash創做人員來它是一個很是的好工具,能夠幫助調試更大更復雜的程序。
在ActionScript 2.0中的新的class類語法用來在ActionSctipt 2.0中定義類。它相似於Java語言中的定義。儘管Flash仍不能超越它自身的原型來提供真正的class類,但新的語法提供了一種很是熟悉的風格來幫助用戶從其它語言上遷移過來,提供了更多的方法來組織分離出來As文件和包。算法
三、ActionScript 3.0更加系統、規範。徹底OOP。
接下來咱們進入到flash CS3(9;在flash8中沒有發生多大的變化)ActionScript 3.這裏咱們不光有一個帶有新的版本號的ActionScirpt 語言,還有一個全新的虛擬機即—Flash Player在回放時執行ActionScript的底層軟件。ActionScript 1.0和ActionScript 2.0都使用是AVM1(ActionScript 虛擬機1),所以它們在須要回放時本質上是同樣的,記得咱們在ActionScript2上說過它增長了強制變量類型和新的類語法,它實際上在最終編譯時變成了ActionScript 1,而ActionScript 3.0運行在AVM2上,一種新的專門針對ActionScirpt 3代碼的虛擬機。基於上面的緣由,ActionScript 3.0影片不能直接與ActionScript 1和ActionScript 2影片直接通信(ActionScript 1和ActionScript 2的影片能夠直接通信,由於他們使用的是相同的虛擬機;若是要ActionScirpt 3影片與ActionScirpt 1.0和ActionScript 2.0的影片通信,只能經過local connection),可是你會發現ActionScript 3.0的改變動深遠更有意義。編程
3、flash as2.0 與as3.0的本質區別c#
1.虛擬機
在編譯階段,as2採用的是AVM1(actionScript vitual machine),而as3採用的是AVM2。新一代虛擬機採用了OOP思想,在執行速度上比起avm1也快了10倍。還提供了異常處理。之前咱們在使用AS2時,一旦出錯,AVM1選擇的是靜默失敗,讓人根本不知道什麼地方出錯了,會浪費大量的時間去查錯,而AVM2與目前主流的編譯器同樣,會有異常處理,運行出錯會輸出錯誤提示,工做效率大大提升。若是作個對比,我想說,AVM1就是大刀長矛,而AVM2就是手槍,大刀和長矛也能殺敵,可是隻在面對弱智的敵人才能發揮做用,面對一個大型項目,不用點現代化工具是不行滴。api
2.事件機制:
這也是不少人拿起as3就不知所措的緣由,初學者會發現連一個按鈕點擊的方法都寫不出來。實際上as3的事件機制採用的是監聽的方式,和as2的onClipEvent不一樣,as3裏全部的事件都是須要觸發器,監聽器,執行器三種結構的,這樣作的好處就是使得這個語言很是的堅強,很是大標準化。不像as2,奇形怪狀的代碼漫天飛,能夠這樣寫,也能夠那樣寫,代碼變得繁複難懂,可讀性太差,執行效率也大大下降。要特別說明的是,as3的全部事件都直接繼承event對象,而event是直接繼承自BOSS類object,結構多麼完美。因此在as3中,全部的事件都繼承自相同的父親,結構相同,提升了重用性。安全
3.封裝性:
這是as3與as2最大的不一樣,as3引入了封裝的概念,使得程序安全性大大提升,各個對象之間的關係也經過封裝,訪問控制而得以肯定,避免了不可靠的訪問給程序帶來的意外產生。網絡
4.XML:
我以爲這是最使人激動人心的改變,如今as3程序員能夠很輕鬆也很自豪的說,咱們是使用XML人羣中最快樂的人。AS2時代對XML的存取仍然須要解析,而AS3則創新的將XML也視做一個對象,存取XML就像存取普通對象的屬性同樣方便,用點語法就能夠,無疑大大提升了效率。
5.容器的概念:
AS3.0採用了容器的思想,告別了as2.0一個MovieClip打天下的局面。對於as2程序員來講,可能不能理解,我mc用的好好的,幹嗎不讓我用啊。可是當你真正的了解as3.0的思想的時候,當你真主的體會到OOP的好處的時候,你會以爲as3.0的容器的思想的徹底正確的。as2.0時代,咱們作什麼都用mc,而as2.0時代的mc也是直接繼承自object,這給了mc極大的權限,極其多大方法屬性,而有時咱們只須要放一個背景圖,這樣作就形成了極大的浪費。說實在話as2.0和as3.0比起來就是浪費之神,因此as2.0編出的swf絕對比as3.0編譯出來的swf要大上幾倍。as3.0把全部你用到的顯示對象都分開,mc的屬性方法都被瓜分開來,舉個例子,你去水果超市買水果,就確定比直接去大型超市買要方便,更節約時間,時間就是金錢,那就是很大的節省。
4、AS3.0新特性
下面介紹了ActionScript 3.0 相對於 ActionScript 2.0 有哪些新的特性和改動:
引入了 package(包) 和 namespace(命名空間) 兩個概念。其中 package 用來管理類定義,防止命名衝突,而 namespace 則用來控制程序屬性方法的訪問。
新增內置類型 int (32比特整數),uint(非負32比特整數),用來提速整數運算;
新增 * 類型標識,用來標識類型不肯定的變量,一般在運行時變量類型沒法肯定時使用。在 AS2.0 中這種狀況下須要用 Object 賴做爲類型表識;
新增 is 和 as 兩個運算符來進行類型檢查。其中 is代替 AS2.0 中的 instanceof 來查詢類實例的繼承關係,而 as 則是用來進行不拋錯誤的類型轉換。
新增 in 運算符來查詢某實例的屬性或其prototype中是否存在指定名稱的屬性。
新增 for each語句來循環操做 Array 及 Object實例。
新增 const 語句來聲明常量。
新增 Bound Method 概念。當一個對象的方法被付值給另一個函數變量時,此函數變量指向的是一個 Bound Method,以保證對象方法的做用域仍然維持在聲明此方法的對象上。這至關於 AS2.0 中的 mx.util.Delegate 類,在 AS3 中這個功能徹底內置在語言中,不須要額外寫代碼。
AS3 的方法聲明中容許爲參數指定默認值(實現可選參數)。
AS3 中方法若是聲明返回值,則必須明確返回。
AS2 中表示方法沒有返回值的 Void 標識,在 AS3 中變動爲 void。
OOP方面的加強
經過類定義而生成的實例,在 AS3 中是屬於 Sealed 類型,即其屬性和方法沒法在運行時修改。這部分屬性在 AS2 中是經過類的 prototype 對象來存儲,而在 AS3 .0中則經過被稱爲 Trait 的概念對象存儲管理,沒法經過程序控制。這種處理方式一方面減小了經過 prototype 繼承鏈查找屬性方法所耗費的時間(全部父類的實現方法和屬性都會被直接複製到對應的子類的 Trait 中),另外一方面也減小了內存佔用量,由於不用動態的給每個實例建立 hashtable 來存儲變量。若是仍然但願使用AS2 中類實例在運行時的動態特性,能夠將類聲明爲 dynamic。
API方面的加強
新增 Display API,使 AS3 能夠控制包括 Shape, Image, TextField, Sprite, MovieClip, Video, SimpleButton, Loader在內的大部分 DisplayList 渲染單位。這其中 Sprite 類可以簡單理解爲沒有時間軸的 MovieClip,適合用來做爲組件等不須要時間軸功能的子類的基礎。而新版的 MovieClip 也比 AS2 多了對於 Scene(場景)和 Label(楨標籤)的程序控制。另外,渲染單位的建立和銷燬經過聯合 new 操做符以及 addChild/removeChild 等方法實現,相似 attachMovie 的舊方法已被捨棄,同時之後也無須去處理深度值。
新增 DOM Event API,全部 在DisplayList 上的渲染單位都支持全新的三段式事件播放機制,以 Stage 爲起點自上而下的播報事件到 target 對象(此過程稱爲Capture Phase),而後播報事件給 target 對象(此過程稱爲 Target Phase),最後在自下而上的播報事件(此過程稱爲 Bubbling Phase)。
新增內置的 Regular Expressions (正則表達式)支持,使 AS3 可以高效地建立、比較和修改字符串,以及迅速地分析大量文本和數據以搜索、移除和替換文本模式。
新增 ECMAScript for XML (E4X)支持。 E4X 是 AS3 中內置的 XML 處理語法。在 AS3 中 XML 成爲內置類型,而以前的 AS2 版本 XML 的處理 api 轉移到 flash.xml.*包中,以保持向下兼容。
新增 Socket類,容許讀取和寫入二進制數據,使經過 AS 來解析底層網絡協議(好比 POP3, SMTP, IMAP, NNTP 等)成爲可能,使 Flash Player 能夠鏈接郵件服務器和新聞組。
新增 Proxy 類來替代在 AS2 中的 Object.__resolve 功能。
新增對於 Reflect (反射)的支持,相關方法在 flash.util.* 包中。
5、總結與建議:
一、AS3.0和2.0的代碼不能混用,且不能和裝載的as2.0或1.0的swf相互通訊。
使用AS3.0能夠加載AS2.0 或者 1.0的swf。可是AS3.0不能夠訪問加載swf中變量和函數。爲了方便理解,咱們能夠想成兩個虛擬機並行工做,可是不能通訊。事實上,我猜實現機制可能就和這個差很少LocalConnection。
使用AS2.0或1.0編寫的swf是不能夠加載AS3.0的。換句話說Flash 8&Flex 1.5及以前全部工具生成的swf都不能夠加載(load)AS 3.0 swf的。
若是想讓AS2.0或1.0的swf與AS3.0 swf協同工做,那麼AS2.0&1.0的文件必須進行移植。就是說轉成3.0。
單個的swf文件中是不能混合使用AS3.0&AS2.0(或者1.0)的。 不會像AS2.0&1.0那樣混用了,畢竟是AS2.0&AS3.0是兩個不相同的虛擬機。
一句話總結,就是AS3.0能夠加載之前的全部版本的swf,可是隻是簡單加載,不能訪問AS2.0(或1.0)的swf內部變量&函數,沒法交互。
二、所採用的編程方式。
as 3.0所採用的編程方式是與java C++很是相似的面向對象編程方式,不論在語法上仍是在設計思路上。 只要你有java C++基礎,那學 AS是很是輕鬆的。不過AS3.0不能像java C++那樣操做底層數據,如存儲數據等,必須經過後臺語言如php asp 等來實現,並且運行大規模數據時會慢一些。
as 2.0以往是主要面向過程的編程方式,也就是說想到哪就能夠寫到哪,但到3.0以後就不行了,你必須把每一塊程序都寫到一個類中,讓類和類之間進行聯繫。凡事都是類的理念。
其實不一樣的事情有不少,可是也能夠這麼講,AS3.0與AS2.0是同樣的,只是語法不一樣了,編程思路不一樣了,但核心內容不變,也就是說,若是你精通AS2.0,那麼,你離精通3.0就不遠了。由於你在編程進對算法的掌握和思想都是相通了。
三、as2.0到as3.0的轉換。
在AS2項目往AS3轉換/移植的過程當中,不要想象這只是一個語法轉換的過程,實際上,你不得不考慮AS3以及其類庫中的一些新機制,所能帶來的性能以及程序結構良好性的提高。所以,可能不少東西,你得從新設計,特別是可視元素和事件相關的,也就是用戶交互方面的東西,我認爲是必須得根據AS3的特色從新設計的,不然轉換是無價值的,甚至會獲得更差的程序。一些純算法方面的代碼,可能不須要從新設計,直接替換一些語言層面的東西便可。還有FlashPlayer的速度提高使代碼執行速度提高10倍左右,可視元素運行/渲染速度平均提高2倍左右,位圖渲染速度有比較明顯的提高。
一些在AS2裏面咱們須要的東西,在AS3裏面,咱們再也不須要了;一些用AS2作出來的東西,運行起來效率不夠理想,用AS3作出來,運行得更快了;一些AS2裏面不可能作到的東西,在AS3裏面,咱們能夠作了。
4、該學as2.0到as3.0,要看你的工做性質和本身目標。
AS1.0是雙腳,行動方便,來去自如,只是走遠路很累。
AS2.0是自行車,好用,方便,省力,能作特技,也能長途跋涉,只是速度就只有那麼多。
AS3.0是小轎車,速度快,環境溫馨,還頗有派頭,可是走街串巷是不太容易了,並且也不是普通老百姓用的起的。
該學as2.0仍是as3.0。要看你的工做性質和本身目標。
若是你主要從事界面設計,動畫設計。但願界面更加互動或者作一些小遊戲,小課件。我覺的這樣簡短程序as2.0徹底能夠勝任。並且學起來也比as3.0要容易。
若是你主要從事程序開發或者指望開發RIA(Rich Internet Application,富互聯網應用系統)或者複雜的flash遊戲等大型的項目。那麼毫無疑問as3.0是你的首選。as3.0的可重用性要比as2.0強,開發效率要高!as3.0語法對其餘主流OOP語言開發者來講更加熟悉。有OOP語言基礎的人員學習as3.0更容易。
從2.0到3.0的跨越比較大,我的感受應該從解決問題出發,以實用爲本,若是是能用2.0迅速解決的問題,就別再用3.0去折騰。但若是要用到正則表達式、E4X(ECMAScript for XML)、位操做等3.0現有的功能的話,那仍是用3.0比較好。