天天看點

ActionScript學習一

一、什麼是AcionScript?

随手翻開一本技術類書籍,第一章第一節多半以“What's xxxx”做标題,要學習學一樣技術,當然最先要弄清它是什麼。用最簡單的一句話定義:AS是一種腳本語言。

這句話裡有兩個關鍵詞:

一、語言:所有的計算機語言都是相通的(包括彙編語言、中級語言、進階語言),這意味着如果你曾經系統的學習過其他的某種計算機語言,那麼AS入門将變得非常容易。

二、腳本:這說明AS是一種解釋型語言(或稱為腳本語言)。它具備了解釋型語言的優點:快速開發,動态性,學習門檻低等等,同時它也繼承了相應的缺點:最主要的兩個缺點是效率低下和源代碼外露。這也是讓當今Flash開發者極為頭痛的兩個問題,效率低下,意味着Flash無法有效的完成一些複雜的算法(就拿遞歸來說,Flash中僅允許256層深度的遞歸)。而源代碼外露,則讓Flash作者的版權無法得到有效的保護,國内外很多著名的反編譯軟體都可以讓Flash中的程式代碼無處遁形。盡管如此,畢竟瑕不掩瑜,Flash AS仍然是一種簡單易用,功能強大的腳本語言,高超的AS程式設計技巧+良好的美工+優秀的創意可以打造出許許多多令人瞠目結舌的作品:絢麗的特效,趣味性極強的的遊戲,功能強大的網絡應用程式....然而,這一切都是要從最基礎到如變量、函數開始(當然,如果你有程式設計基礎那就另當别論),在宏偉的大廈也是一磚一瓦建設起來的,不是嗎?

二、解釋型?編譯型?跨平台?

可能有朋友注意到,剛才談到Flash的源代碼外露的問題時,有這樣一句話“很多著名的反編譯軟體....”,即曰“解釋”,又何以“反編譯”?并非是我出爾反爾,Flash AS的的确确是通過解釋執行的,而用來解釋+執行的工具,就是大名鼎鼎、擁有98%浏覽器占有率的Flash Player。然而,在你把源程式放心交給Flash Player去執行之前,必須要經過一個“編譯”的過程,它将源代碼轉換成一種可以被FP識别的标簽(tag)。而這些标簽被以ZIP方式壓縮存儲在.swf格式的檔案中。當然,一個.swf檔案中除了包含AS,還有圖形、聲音等資源。在“解釋”之前先進行“編譯”并非是多此一舉,編譯的好處主要有三個:

一、經過編譯後的源代碼,以标簽(稱為“目标代碼”)的形式存在,更容易被Flash Player識别,因而可以提高解釋速度。

二、編譯過程可以預先檢測程式中的文法錯誤,并給出适當的錯誤資訊,友善調試。

三、編譯過程也是代碼壓縮的過程,編譯後的代碼更加精簡。

這麼說來,把AS稱為一種純粹的解釋型語言就有失妥當了,我們可以把它歸類為一種“混合型”語言。混合型語言的特點是,源代碼先經過編譯,生成一種“中間代碼”,在由相應的平台(Flash Player)去解釋執行中間代碼。混合型語言中的佼佼者當屬現在同樣火熱的Java語言:Java語言的源代碼(.java)經過編譯,得到位元組碼(.class),在由平台(JVM)去解釋執行位元組碼。不幸的是,混合型語言的這種這種“編譯”過程通常是可逆的,無論是java還是flash,都可以根據其中間代碼,反編譯得到源代碼。而且,反編譯swf的難度要遠遠低于class,而在編譯過程中加密要複雜的多,這也就是為什麼如今flash反編譯軟體橫行的原因。

Flash Player的另一個優勢是提供了跨平台性,無論何種平台,隻要擁有内嵌Flash Player的浏覽器或是獨立的Flash Player播放器,就可以欣賞Flash,而swf檔案本身不需要任何的改變,不同的隻是Flash Player在各個平台的實作方式而已。這一點也是它能夠廣泛應用于網際網路的原因之一。

可能有的朋友想到Flash的另一種播放方式,即Projector方式,通常我們所見到的是一個.exe檔案。然而需要注意的是,以Projector方式釋出的Flash,是不具備跨平台能力的。隻要明白了Projector的原理,就可以很容易了解這一點,其實Projector僅僅是簡單的将一個獨立的Flash Player播放器和swf檔案整合,前面提到,不同平台的Flash Player實作不同,是以,被整合到Projector中的swf無法使用不同的Flash Player播放,自然也就失去了其跨平台性。Projector真正的好處在于,可以讓原本沒有Flash Player的機器,在不安裝FP的情況下,浏覽Flash。其效果大緻相當于你去買DVD光碟,但是你沒有DVD機,是以賣光碟的小販免費送了你一台DVD機一樣。當然,現實中不可能有這樣的好事。:)

繼續閱讀