讓我幫你認識Actionscript

聲明:這篇文章我將以連載的形式,不定期的更新,有興趣的朋友可以隨時關注。
本文允許隨意轉載,但請註明:作者:jinni,出處:經典論壇

更新與2004年5月2日   點擊這裏參與討論

在論壇當斑竹時間長了,經常會碰到有朋友提出這樣的問題:我是菜鳥,請問高手,AS到底該怎麼學?我自認算不上高手,但三年的AS編程經驗,多少也可以算半個老手(應了藍色那句話:沒有菜鳥和高手之分,只有新手和老手之別),之所以這麼說,就是爲了先表明立場,在網上混了這些時間,國內的AS頂尖高手我大都還算認識,自知尚無資格與他們比肩,之所以恬不知恥撰此一文,實在是不忍看着衆多初學者因爲摸不着學習的門路而苦苦摸索抑或乾脆放棄,文中所述均爲筆者個人愚見,有欠妥之處歡迎探討。另外,非常感謝AOL,他提供了文章中用到的一些很重要的信息。

一、什麼是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機一樣。當然,現實中不可能有這樣的好事。:)

三、學習AS需要不需要有編程基礎?如果需要,該去學習那種語言?

這是一個經常聽到的問題。我前面曾經提到,如果你有着其他語言的編程基礎,學習AS將變成一件非常容易的事。但如果沒有呢?是不是會很困難?答案是否定的。

總的來說,AS是一種相對比較簡單的語言,甚至你可以用它來作爲你進入編程世界的第一步。如果你有着c/java/js的編程經驗,你將會發現AS只是你曾經學習並掌握的知識的一個子集,你面對的僅僅是不同的API,僅此而已。然而,如果你的目的只是爲了學習AS,那你完全沒有必要爲了它先去學習其他任何一種語言,這就像你爲了弄明白1+1=2,而費盡九牛二虎之力去研究2+2=4一樣,本末倒置。你現在所要做的,就是從最基礎開始。何謂基礎?變量、數據類型、運算符等等都算是基礎,學了一段時間編程卻仍然搞不清楚i++與++i的區別的人不在少數。不要小看它們,對基礎概念掌握的不牢固,可能會爲你將來的編程經歷造成重大的困擾,正所謂千里之堤,潰於蟻穴。在這個時候,你可能需要一本書來幫助你,筆者極力推薦下面這本書:

看到他的封面,你就知道這本書是由鼎鼎大名的O'reilly公司出版。如今,O'reilly公司的出版物儼然已成爲計算機技術圖書的標準,看到了O'reilly的標誌,就等於看到了質量的保證。(我所說的僅僅是針對英文原版而言,對於有條件的讀者來說,應該儘可能閱讀英文原版。英語不好也沒關係,看看 www.blueidea.com/bbs/archivecontent.asp?id=799443
這本書可以說是Flash ActionScript的絕佳入門書籍,書中系統地闡述了AS中所有的基礎內容,包括:變量,數據與數據類型,原始數據類型,運算符,語句,條件語句,循環控制語句,函數,事件與事件處理,數組,對象與類等等。

先不要被這一大堆內容嚇倒,聰明的你應該很容易理解它們,學習的目的在於運用。因此,對你來說最重要的是按照書中的例子重新做一遍,以加深理解,最好能夠修改那些例子,並對出現的錯誤加以分析。這樣,你將會發現自己的進步速度之快甚至超過了自己的想象,儘管你現在還不能做出什麼像摸象樣的東西,但是,這將爲你今後的成就奠定堅實的基礎。有的朋友總是不重視這樣的基礎訓練,認爲創意、思想最爲重要,誠然,我不否認創意在我們工作中的重要性,但好的創意,也是需要基礎來實現的,否則,你充其量只能做個空想家罷了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章