flash語言菜鳥教程_第1頁
flash語言菜鳥教程_第2頁
flash語言菜鳥教程_第3頁
flash語言菜鳥教程_第4頁
flash語言菜鳥教程_第5頁
已閱讀5頁,還剩83頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第1章

揭開ActionScript的神秘面紗

ActionScript是Flash內置的編程語言,用它為動畫編程,可以實現(xiàn)各種動畫特效、對影片的良好控制、強大的人機交互以及與網絡服務器的交互功能。

ActionScript是一門吸收了C++、Java以及javascript等編程語言部分特點的新的語言。ActionScrip使用英文單詞和元件提供了一種為Flash影片設置指令的方法。它的存在確保了Flash影片較之普通的按照線性模式播放的動畫具備強大得多的人機交互能力。

可以為時間軸中的關鍵幀、按鈕和影片剪輯添加ActionScript。選中這些關鍵幀、按鈕和影片剪輯,打開其動作面板,你就可以看到它們都添加了哪些腳本。

1.1

Flash中的程序

交給計算機執(zhí)行的指令集稱為程序。程序的另一個名稱叫做腳本。從現(xiàn)在開始,我們將這些指令集統(tǒng)稱為腳本。

腳本都必須有它的運行環(huán)境,就ActionScript來說,它的運行環(huán)境就是Flash影片。ActionScript可以指揮Flash影片該做什么。在某些情況下,ActionScript還可以指揮其他的東西,如用戶的操作系統(tǒng)、瀏覽器等。但是ActionScript最主要的用途還在于控制Flash影片內部的東西。

短的腳本可以只有一行,長的腳本可以長達幾千行。它們可以作用于Flash影片的一個部分,也可以貫穿影片始終。有人把使用了腳本的整個Flash影片看作一個程序,也有人把影片中單獨出現(xiàn)的腳本看作一個程序。這兩種看法都正確,因為一個單獨的程序也可以被定義成若干小程序。

你可能對某些編程語言已經相當熟悉或者有所了解。例如廣大網頁設計者所熟知的javascript,以及另一種相似的語言VBScript,它們能用來編輯動態(tài)網頁。HTML(HypertextMarkupLanguage超文本置標語言)是另一種特殊的語言,瀏覽器將按照它所包括的指令正確地顯示文本和圖片。

在學校里面,你可能接觸過一些編程方面的課程,如BASIC、Pascal、C、Java等。

除HTML以外,以上提到的所有的語言都包含很相似的程序結構:循環(huán)、條件、變量等等。只要你知道了ActionScript的特殊用法,你就可以將以前所學的編程知識利用起來。就算你以前從來沒有接觸過編程方面的知識,不用擔心,我會將所有需要的知識都告訴你。

1.2

ActionScript是從哪里來的

ActionScript是從哪里來的呢?事實上它的確是從好幾種程序語言中深化而來的。下面我們先花一點時間了解一下計算機語言的起源和發(fā)展。

當?shù)谝慌_數(shù)字計算機誕生的時候,唯一的編程語言是計算機的專用語言——二進制代碼,即由數(shù)字1和0組成的編碼。當由1和0組成的不同序列被輸入到計算機中,計算機就會執(zhí)行完全不同的操作。使用這種語言編寫程序是相當費勁的,就算寫一個簡單的兩數(shù)相加的程序,程序的長度也是相當驚人的。

為了避免每次都為兩數(shù)相加的操作書寫長長的二進制程序,有人書寫了一種專門用于兩數(shù)相加的代碼,你可以方便地使用相同的代碼實現(xiàn)任意兩數(shù)的相加操作。接著,一些類似的函數(shù)誕生了,用它們可以處理所有的基本任務,如加、減、乘、除、比較、循環(huán)等等。從此以后,你可以使用這些事先編寫好的函數(shù)執(zhí)行幾乎所有的操作了。

現(xiàn)代的計算機語言理解和使用起來較之二進制編碼都已經容易了無數(shù)倍,其一,現(xiàn)代計算機語言與英語語法很相似,如“go”、“for”、“begin”、“if”以及+、-、=等,它們的含義和用法與現(xiàn)實中都相差不大。

BASIC、Pascal等編程語言,幾乎可以像英語句子一樣閱讀,所以學習和理解起來都非常容易。其他語言,如C、Fortran,它們的功能更強一些,經驗豐富的程序員可以用它們完成更復雜的任務。更多的語言居于以上兩種語言之間,如C++、Java和javascript,它們既有一定的可讀性,也有較強的功能。ActionScript與這些語言有更多的相似之處。

Flash遵從ECMA(EuropeanComputerManufacturersAssociation歐洲計算機工業(yè)協(xié)會)制定的標準,因此ActionScript與ECMAScript(ECMA開發(fā)的一種語言)極其相似。所以與其說ActionScript建立在javascript的基礎上,不如說ActionScript和javascript都建立在共同的基礎之上。

Flash具備交互功能,它的早期版本已能夠利用簡單的腳本實現(xiàn)不太復雜的導航和按鈕。同時,F(xiàn)lash還是一種矢量動畫工具,它的發(fā)展是與對它的應用需求分不開的,比如說網頁設計者需要一種工具來制作體積更小的圖像,由于矢量圖是由線條和填充色構成的,而不是像位圖一樣由像素構成,所以它能夠大大縮減文件大小,正順應了網頁設計者的需求,使許多系統(tǒng)配置低的用戶也能夠訪問和瀏覽他們的網頁。

雖然說Flash是一個圖形動畫工具,但也不是沒有使用程序的需要,比如說設計者需要制作一個按鈕,讓別的用戶能通過單擊按鈕瀏覽到別的頁面。

Flash早期版本中的腳本非常簡單,直到Flash4,才具有了標準的程序結構,如條件結構、循環(huán)結構等。但是Flash腳本仍然需要使用下拉菜單和空白文本框添加,幾乎還不能叫做一種編程語言。

真正的ActionScript到了Flash5才出現(xiàn),程序員可以直接鍵入程序并將程序添加給需要作用的元素。FlashMX更大地擴展了ActionScript,現(xiàn)在的ActionScript提供了多達300余種命令、函數(shù)、運算符和結構,這才真正成為一種成熟的程序語言。

1.3

初識ActionScript

腳本是由英語單詞、數(shù)學符號和函數(shù)構成的,下面是一個ActionScript的例子:

on(press){

gotoAndPlay("myframe");

}

你可以通過其中的關鍵單詞推測這段程序的作用。單詞press表示按,即用鼠標在某種對象上面單擊,這里的對象就是按鈕。第二行中的長單詞可以分開讀成“gotoandplay”,可以將其理解為命令Flash到達影片中的一個特定位置并從這一特定位置開始播放影片。

從以上可以看出,ActionScript可以控制Flash影片的播放。在著手學習ActionScript之前,我們將對ActionScript在Flash影片中的功能作更多的了解。

Flash影片可以包含若干場景,每個場景都有時間軸,每條時間軸從第1幀開始。如果不添加ActionScript,F(xiàn)lash影片會自動從場景1的第1幀開始播放,直到場景1的最后一幀,然后接著播放場景2,以此類推。

ActionScript的主要目的就是用來改變這種自動而死板的線性播放行為,一段腳本可以使影片在一個特定的幀上停止,循環(huán)播放前面的部分,甚至于讓用戶控制要播放哪一幀。ActionScript能夠使影片完全脫離被動的線性播放模式。

這還不是ActionScript的所有功能,它還可以將Flash影片從簡單的動畫改變?yōu)榫哂薪换ツ芰Φ碾娔X程序。下面讓我們見識一下ActionScript能實現(xiàn)的一些基本功能。

=控制播放順序

你可以通過選擇某個菜單將影片暫停在某個位置,然后由用戶來決定下一步干什么,這就避免讓影片徑直朝前播放。

=創(chuàng)建復雜動畫

直接使用Flash中的繪圖工具和基本命令來創(chuàng)建足夠復雜的動畫是相當困難的,但是腳本可以幫助你創(chuàng)建復雜的動畫。例如可以用ActionScript控制一個球在屏幕中無休止的跳動,并且可以使它的動作遵從物理學中的重力定律。如果你不用ActionScript來實現(xiàn)這樣的動畫,你將需要幾千幀來模仿相似的動作,而用ActionScript,你將只需要一幀。

=響應用戶輸入

你可以通過影片向用戶提出問題并接收答案,然后將答案信息用于影片中或將其傳送到服務器。加入了相應ActionScript的Flash影片更適合做網頁中的表單。

=從服務器獲取數(shù)據(jù)

與向服務器傳送數(shù)據(jù)相反,使用ActionScript也可以從服務器中獲取數(shù)據(jù),你可以獲取即時的信息并將它提供給用戶。

=計算

ActionScript也可以對數(shù)值進行計算,用它可以模擬出各種復雜的計算器。

=調整圖像

ActionScript可以在影片播放時改變圖像的大小、角度、旋轉方向以及影片剪輯元件的顏色等。你還可以從屏幕中復制或刪除對象。

=測試環(huán)境

你可以用ActionScript測試Flash影片的播放環(huán)境,如獲取系統(tǒng)時間,獲取FlashPlayer的版本信息等。

=控制聲音

ActionScript可以方便地控制聲音的播放,甚至控制聲音的聲道平衡和音量等。

1.4

ActionScript放在哪里

初學ActionScript的Flash愛好者最想問的問題恐怕是“ActionScript應該放在哪里?”

Flash是一種復雜的多媒體編輯環(huán)境,如果你曾經使用過Flash,或者看過FlashMX附帶的教程,你就應該知道Flash中的一些基本術語或元素。在Flash的元素中有3個地方可以放置腳本。

1.4.1

時間軸

Flash影片中的每個場景都有時間軸,時間軸上的每個關鍵幀都可以放置腳本。并且,你還可以在每一個關鍵幀的不同層上放置不同的腳本。

在主時間軸中放置腳本之前,需要先選擇一個關鍵幀。啟動Flash時,時間軸中有一個空白關鍵幀,如圖1-1顯示了默認的空白關鍵幀和選中它時的狀態(tài)。

圖1-1

新建Flash文檔默認的空白關鍵幀

當選中一個關鍵幀后,你就可以打開動作面板,查看里面的腳本或者開始編寫你自己的腳本了。

有幾種方法可以打開動作面板。你可以選擇“窗口”→“動作”命令,或者按快捷鍵F9。

如果你對Flash復雜的影片瀏覽器比較熟悉,你也可以在影片瀏覽器中查看整個Flash影片所用到的腳本。打開影片瀏覽器的快捷鍵是Alt+F3。

如圖1-2所示即為FlashMX的動作面板。該動作面板被命令為“動作-幀”,這是因為其中的腳本將作用在幀上。如果是新建的一個影片,動作面板將是空的。后面我們將在動作面板中添加各種各樣的腳本。第2章我們將看到如何使用動作面板。

圖1-2

幀動作面板

時間軸中的腳本將在Flash影片播放到腳本所在的關鍵幀位置時自動執(zhí)行。例如,如果你為某一關鍵幀添加了stop()命令,當影片播放到那一幀位置時就會自動停止。要讓影片繼續(xù)播放,只有在其他的腳本中添加相應的命令。

在時間軸中添加腳本還有一個好處就是方便你在ActionScript中使用函數(shù)。函數(shù)是可以重復使用的腳本代碼,要想使整個影片都可以調用腳本中的函數(shù),就必須將函數(shù)放置在主時間軸中。

1.4.2

按鈕

Flash中的元素又稱作元件(symbol)。元件主要有3種:圖形(graphic)、影片剪輯(movieclip)和按鈕(button)。圖形元件不能承載腳本,它們只能是簡單的靜態(tài)或動態(tài)圖像。影片剪輯與圖形元件類似,但是它可以承載腳本。

第3種元件就是按鈕,按鈕可以承載腳本。事實上,如果沒有腳本,按鈕幾乎不會發(fā)揮什么作用。

要為按鈕添加腳本,首先要在舞臺中選中按鈕,然后選擇“窗口”→“動作”命令或按快捷鍵F9打開動作面板。

與幀動作面板相對應,選中按鈕時動作面板的標題是“動作-按鈕”。

你可能會認為,為按鈕添加的腳本應該是在單擊按鈕時執(zhí)行。其實,也可以為其他鼠標動作添加相應的腳本,如鼠標進入和移出按鈕區(qū)域。按鈕也可以響應按鍵動作,這使得我們可以方便地為按鈕設置快捷鍵。

1.4.3

影片剪輯

影片剪輯不同于圖形元件,可以為影片剪輯命名,為影片剪輯添加腳本。為影片剪輯添加腳本的方法與按鈕類似。

為影片剪輯添加的腳本可以用來控制影片剪輯自身或控制時間軸中的其他影片剪輯。使用腳本可以判斷影片剪輯出現(xiàn)在屏幕中的什么位置,你也可以用腳本來控制影片剪輯的重復播放等,進而控制整個動畫。

除了可以為影片剪輯添加腳本,你也可以在影片剪輯內部添加腳本。影片剪輯其實也是一個單獨的Flash影片,在影片剪輯中有一條單獨的時間軸,你可以像在主時間軸中添加腳本一樣在影片剪輯內部的時間軸中添加幀動作腳本。同樣地,你也可以將按鈕放置到影片剪輯內部并為按鈕添加腳本。也就是說主時間軸中的影片剪輯里面有子影片剪輯,子影片剪輯里面又有按鈕,按鈕中也可以有影片剪輯,如果需要,你都可以為它們添加腳本。

1.5

練習:你的第一段ActionScript

下面來編寫你的第一段ActionScript,讓你對ActionScript有更深的了解。操作步驟如下:

(1)創(chuàng)建一個新的Flash文檔。

(2)選中時間軸中的第1幀,按F7鍵兩次插入兩個空白關鍵幀,這時時間軸中應有3個空白關鍵幀。

(3)在每一幀中繪制不同的圖形。

(4)選擇“控制”→“測試影片”命令或按Ctrl+Enter鍵測試影片,你會看到影片在這3個幀之間循環(huán)播放。

(5)回到主時間軸,選中第2個關鍵幀,按F9鍵打開動作面板。

(6)動作面板左邊顯示了可擴展的ActionScript關鍵字目錄。在“動作”/“影片控制”目錄下面找到關鍵字stop并雙擊,腳本窗口將添加如下所示的一行語句:

stop();

(7)關閉動作面板,按Ctrl+Enter鍵測試影片,播放第1、2幀后影片會停止,你將看不到第3幀。

ActionScript發(fā)揮了作用,它成功地阻止了影片無休止地循環(huán)播放這3幀。

第2章

FlashMX的動作面板

動作面板是FlashMX面板系統(tǒng)的一部分,ActionScript程序員經常會用到它。為了成長為一名嫻熟的Flash編程高手,你有必要對Flash的動作面板和在線幫助系統(tǒng)相當?shù)氖煜ぁ?/p>

動作面板的標準模式允許你從腳本目錄中選擇關鍵字并設置相應的選項,而專家模式為程序員提供了直接輸入代碼的自由。

2.1

了解動作面板

FlashMX的面板系統(tǒng)向你提供了查看和設置Flash中各種元素信息和屬性的捷徑。第一次啟動FlashMX的時候,系統(tǒng)將會詢問你要使用Flash做哪些方面的工作,然后為你設置默認的面板界面。你可以選擇“窗口”→“面板設置”命令在不同的面板界面之間切換。與此同時,也決定了動作面板的大小,但是你可以將它改變成任何適合你需要的大小。

你可以通過鍵盤上的F9鍵隨意顯示或隱藏動作面板。顯示動作面板后,你可以單擊它的標題欄將它展開或折疊起來。你還可以拖動動作面板的左上角將它從Flash的工作界面中分離出來。

動作面板有兩種不同的工作模式。默認的模式是標準模式。在標準模式下,你必須從窗口左邊的菜單中選擇需要的關鍵字,而不能直接使用鍵盤輸入腳本,因此可以有效避免即使是很細小的錯誤。

2.2

動作面板的標準模式

如圖2-1所示為標準模式下的動作面板。

圖2-1

標準模式下的動作面板

面板上部的下拉菜單顯示了你當前所編輯的腳本的準確位置。圖2-1中顯示的是“幀動作腳本1圖層名稱圖層1”,也就是說當前所編輯的腳本是作用于圖層1的第1幀的。

面板左邊顯示了ActionScript命令的分類目錄,單擊展開一個目錄,你將看到它里面的子目錄或命令。

面板的右邊是一個空白文本區(qū),它將顯示你所選擇的命令和函數(shù)。圖2-2顯示了你從左邊的目錄里面選擇插入“動作”→“影片控制”中的goto命令后的動作面板。goto命令是通過雙擊鼠標添加到腳本中的。

圖2-2

在動作面板中添加goto命令

面板右上部顯示了goto命令的簡單定義,下面顯示了與goto命令相關的各種選項,包括“場景”、“類型”和“幀”等,就像是所選命令的參數(shù)設置區(qū)。參數(shù)設置區(qū)的狀態(tài)會依據(jù)所選擇ActionScript命令的不同而發(fā)生變化。

第一個需要設置的選項是選擇gotoAndPlay命令還是選擇gotoAndStop命令。圖2-2中選中的是“轉到并播放”單選項,也就是gotoAndPlay。這兩種命令是相似的,都是跳轉到特定的幀,但是gotoAndPlay命令使影片從特定幀開始播放,gotoAndStop命令使影片在特定幀上停止。

這個命令還需要附加一些信息才能正常工作。如,你想要使影片跳轉到哪一幀,這一幀位于哪個場景,圖2-2指定的是當前場景。在“類型”下拉菜單中可以選擇指定特定幀的方式,你可以使用幀號、幀標簽和表達式中的一種。圖2-2選中的是幀號類型,這就要求你精確地指定幀的編號,如1。

在以上內容的下面顯示了和兩個按鈕。它們使你可以快速地在腳本中插入和刪除命令。但是這種方法很少使用,你可以通過左邊的分類目錄添加腳本,使用鍵盤上的Delete或BackSpace鍵刪除不需要的命令。

和按鈕的右邊還有幾個功能不一的按鈕。按鈕使你可以從腳本中查找文本,按鈕使你可以替換文本,使用按鈕可以插入目標路徑,按鈕可以為你調試腳本設置斷點,和按鈕使你可以選擇腳本的前一行或后一行。

在動作面板的底部你可以看到這樣的一行:“第1行:gotoAndPlay(1);”,這是動作面板的狀態(tài)行,它顯示了當前選中的行號和該行的內容。

2.3

分類目錄

動作面板左邊的目錄將ActionScript的關鍵字有組織地分成幾組,以使你更容易查找到需要的關鍵字的位置。以后我們會對每個組中的命令和符號作詳細的講解,下面先對其進行一下簡要的介紹。

=動作

在動作類中包含了最簡單的ActionScript命令。動作類提供了測試條件、循環(huán)、創(chuàng)建函數(shù)、復制和創(chuàng)建影片剪輯以及從服務器中獲取數(shù)據(jù)等功能的命令。動作類中的命令是ActionScript最重要的組成部分。動作類又分為影片控制、瀏覽器/網絡、影片剪輯控制、變量、條件/循環(huán)、打印、用戶定義的函數(shù)以及其他動作等子類。

=運算符

它包括了各種數(shù)學和比較運算符,如+號,用于兩數(shù)相加;==號,用于判斷兩數(shù)是否相等。運算符類下面又分為按位、比較、賦值、邏輯、算術和其他運算符等子類。

=函數(shù)

使用函數(shù)可以轉換數(shù)據(jù)或獲取需要的信息,如獲取Flash的版本信息。你可以使用函數(shù)將字符串123轉換成數(shù)字123。你還可以自定義需要重復使用的函數(shù)。在函數(shù)類下面主要有兩個子類:數(shù)學函數(shù)和轉換函數(shù)。

=常量

常量類中包含了一些具有特定值的特殊關鍵字,如true、false、null和newline等。

=屬性

屬性類中的關鍵字反映了Flash中元素的相關信息。例如_x屬性代表影片剪輯在屏幕中的水平位置。

=對象

對象類是最復雜的一類,它包含了ActionScript中的眾多概念。所有的對象關鍵字被分成4個子類:核心、影片、客戶端/服務器、創(chuàng)作。影片剪輯是影片類下面的一種,它包含了與控制影片剪輯相關的關鍵字。Math是核心下面的一種,它包含了求平方根、正弦值等數(shù)學函數(shù)。

=否決的

這一類中的關鍵字是已經作廢但FlashMX仍然支持的,在FlashMX中請盡量避免使用,因為在以后的Flash版本中將不再支持這些關鍵字。

=FlashUI組件

這一類中的關鍵字包含了特殊功能的組件,如單選按鈕、滾動條等。

=索引

索引類將ActionScript中的所有關鍵字按字母順序排列。以上各類中的關鍵字都可以在索引類中找到。

動作面板中提供的關鍵字分類有時可以幫你方便地找到需要的關鍵字,但也有可能給你帶來麻煩。如你可能認為表示影片剪輯水平坐標屬性的_x應該在對象類的“影片”/“影片剪輯”/“屬性”里面,但它卻在屬性類里面。你可能認為sqrt(開平方)應該在函數(shù)類中,但它卻在“對象”/“核心”/“Math”/“方法”下面。

2.4

使用Flash的幫助系統(tǒng)

最好的程序員往往也要查閱一下工具書,F(xiàn)lash中的幫助系統(tǒng)就是一本功能強大的工具書,所以在學習更多內容之前,先了解一下Flash的幫助系統(tǒng),將對我們的學習不無陴益。

Flash使用工具提示和基于擴展HTML的幫助系統(tǒng)。為了對ActionScript的使用更加嫻熟,你就需要知道如何使用它們。

2.4.1

簡單定義

如果你習慣使用動作面板中的關鍵字分類目錄,你應該會注意到當你在左邊的目錄中選中某個關鍵字時,面板右邊的上面部分會給出與所選關鍵字相應的簡單定義。你會看見這樣的句子:“要添加某項,可雙擊該項或將其拖動到腳本窗口。

例如選中goto命令時,你會看到這樣的提示:“轉到影片的指定幀?!彼@示了該腳本的基本功能。

單擊別的命令查看一下它們的定義,在學習下面的知識之前,你可以花些時間多看一下動作面板中的命令。

2.4.2

腳本參考面板

Flash使用腳本參考面板幫助你記住ActionScript的語法。可以選擇“窗口”→“腳本參考”命令或按快捷鍵Shift+F1打開腳本參考面板。腳本參考面板如圖2-3所示。

圖2-3

FlashMX的腳本參考面板

腳本參考面板的左邊與動作面板左邊的腳本目錄很相似。你也可以通過動作面板進入腳本參考面板,單擊動作面板中的按鈕可以打開腳本參考面板,打開的腳本參考面板會自動顯示你在動作面板中選中的命令。

2.4.3

HTML幫助文檔

如果要獲得ActionScript命令更詳細的說明,可以選擇“幫助”→“動作腳本詞典”命令,這將啟動你的瀏覽器并打開如圖2-4所示的頁面。

圖2-4

動作腳本詞典

瀏覽器窗口的左邊是所有ActionScript命令和函數(shù)的總目錄,在左邊的條目上單擊,窗口的右邊部分會顯示其詳細的內容。

選中每個條目時,右邊窗口中通常會包括與該條目的說明以及它的使用范例。

在你以后使用Flash的時候可能經常會用到幫助文檔,所以請花一些時間了解它吧。

2.5

動作面板的專家模式

現(xiàn)在你已經了解了動作面板的標準模式,下面要向你推薦多數(shù)ActionScript程序員使用的專家模式。

在專家模式下,你可以直接通過鍵盤輸入腳本,而不需要從左邊的目錄中選擇命令。這種模式下你可以在動作面板中輸入任何東西,但也很容易導致錯誤。

在專家模式下,你仍然可以從左邊的目錄中選擇并插入標準的ActionScript命令、函數(shù)和運算符。當你記不確切一條命令的時候就可以使用這種方法。

2.5.1

切換模式

要從標準模式切換到專家模式,可以單擊動作面板中的按鈕,或者單擊動作面板右上角的按鈕,在打開的下拉菜單中選擇“專家模式”命令。在動作面板獲得焦點的情況下,快捷鍵Ctrl+Shift+N可以切換到標準模式,快捷鍵Ctrl+Shift+E可以切換到專家模式。

如圖2-5所示為專家模式下的動作面板。在專家模式下,參數(shù)設置區(qū)、命令提示信息都沒有了,腳本編輯窗口占據(jù)了動作面板右邊的大部分。

圖2-5

專家模式下的動作面板

從標準模式切換到專家模式是非常容易的,但是要從專家模式切換到標準模式則要求腳本中沒有語法錯誤。比如說你不明白如何設置一些命令的參數(shù),需要從專家模式切換到標準模式以使用標準模式下的提示,但是Flash卻不允許你進行切換,提示你“此腳本中有語法錯誤,必須在‘專家模式’下編輯它”;而當你知道如何設置參數(shù)并將腳本書寫正確了,又不再需要切換到標準模式了。

2.5.2

動作面板的下拉菜單

動作面板的下拉菜單中有一些特別是在專家模式下編輯腳本時很有用的命令。

你可以使用查找和替換命令在代碼中執(zhí)行查找和替換操作。按快捷鍵Ctrl+F可以打開“查看”對話框,按快捷鍵Ctrl+H可以打開“替換”對話框。

“轉到行…”命令可以快速轉到并選中指定的行。

“語法檢查”命令或按鈕可以對窗口中的腳本進行語法檢查,如果沒有語法錯誤,將提示你“此腳本中沒有錯誤?!?/p>

通常,語法檢查只能檢查出代碼中的明顯語法錯誤,它并不能檢查腳本是否能正確運行。經常會發(fā)生這樣的事情,就是每一行的代碼都是正確的,但所有的代碼加在一起卻導致了錯誤。

語法檢查功能很實用,特別是對初學者來說,它能方便地檢查出誤用運算符或缺失括號等情況。

“自動套用格式”命令可以按預先設置的樣式和縮進等設置腳本的格式。你可以選擇“自動套用格式選項”命令,在“自動格式選項”對話框中重新設置要應用的格式,如圖2-6所示。

圖2-6

“自動格式選項”對話框

另外,選擇“首選項…”命令可以設置動作面板中腳本代碼的顏色、制表符寬度、字體等。你也可以在FlashMX的菜單欄中選擇“編輯”→“首選參數(shù)”命令,在打開的“首選參數(shù)”對話框中選中“動作腳本編輯器”選項卡,打開相同的對話框,如圖2-7所示。

圖2-7

“首選參數(shù)”對話框

為腳本上色有利于編寫程序。使用這項功能時,你將看到ActionScript中的關鍵字以一種顏色顯示,而另外一些變量和常數(shù)以另外的顏色顯示。這對初學者是很有幫助的。如正確輸入關鍵字gotoAndPlay后,它馬上會以藍色顯示。如果它的顏色沒有發(fā)生變化,有可能就是你的輸入有誤。

動作面板下拉菜單中還有導入導出文件以及打印等命令,可以將使用外部的文本編輯器編輯好的腳本導入到動作面板中,或將動作面板中的腳本導出或打印出來。

從外部導入腳本的方法并不值得推薦,因為動作面板雖然不是最快捷的文本編輯器,但是在其中編輯ActionScript是最好的,你可以在需要的時候參照腳本分類目錄,可以即時的查看Flash中的影片剪輯的名稱,查看幀編號或幀標簽。另外,你還可以快捷地切換到Flash影片中要插入腳本的任何位置。

2.5.3

在專家模式下輸入腳本

使用動作面板的專家模式要比標準模式容易得多,因為在專家模式下你只需要敲擊鍵盤,而不需要在窗口中填寫表格。專家模式下的動作面板就像一個簡單的文本編輯器。

使用專家模式的缺點就是很容易出錯。標準模式為你添加了很多限制,而在專家模式下你有可能鍵入不正確的命令或者將參數(shù)放錯位置。

在專家模式下,你可以方便地將光標定位在合適的位置。但是Flash也不能完全任你隨心所欲,它會在你鍵入的同時自動調整腳本格式,將不同的關鍵字設置成不同的顏色。

你可以單擊按鈕以檢查腳本中的語法錯誤,單擊按鈕以格式化整個腳本,如在需要的位置換行、設置空格和縮進等。

動作面板還有代碼提示的功能。當你鍵入腳本的時候有時會出現(xiàn)一個提示菜單,你可以忽略它繼續(xù)鍵入,或者從中選擇需要的項目。單擊按鈕可以顯示代碼提示。

2.6

練習:在專家模式下輸入腳本

下面我們練習在專家模式下輸入腳本。其操作步驟如下:

(1)新建一個文檔。

(2)選擇默認的場景1圖層1中的第一個空白關鍵幀。

(3)按F9鍵打開動作面板。

(4)使用菜單將動作面板切換到專家模式。

(5)在腳本編輯區(qū)單擊。

(6)鍵入下面的一行代碼:

gotoAndPlay(5);

此時你的動作面板應該如圖2-8所示。第3章

ActionScript編程初步

計算機程序是由命令、函數(shù)、運算符、條件和循環(huán)等結構組成的。命令是為計算機下達的一系列指令,函數(shù)執(zhí)行計算和返回值,通過運算符將若干數(shù)據(jù)以某種特定的方式結合起來,條件測試一個或多個值以返回一個為true或false的布爾值,循環(huán)結構使得程序能夠重復執(zhí)行一系列相同的指令。

變量是存儲數(shù)據(jù)的容器,變量有變量名和變量值。

編程是一項需要耐心的工作,首先你必須理解要用程序解決什么樣的問題,然后需要將這個問題分解成若干步驟,將每個步驟再分成更小的步驟,直到每個步驟都小得很容易解決了為止。

程序編寫好后,可能會存在許多漏洞或缺陷,所以你還需要對程序進行調試,直到程序能正確運行為止。

3.1

程序基本結構

計算機程序是由命令、函數(shù)、運算符、條件和循環(huán)等結構組成的。

3.1.1

命令、函數(shù)和運算符

在此之前,我們都是用關鍵字來描述ActionScript中的元素,如關鍵字gotoAndPlay,它也是一個命令。

命令是ActionScript中用來告訴Flash所要執(zhí)行的特定操作的元素。之所以稱之為命令,就是因為它將被嚴格的遵照執(zhí)行,如果要用gotoAndPlay跳轉到一個不存在的幀,這樣的命令就不能被執(zhí)行。

命令是程序中最基本的元素,在Flash中如果不使用命令,幾乎不能進行任何操作。從本書中你將學到很多命令。

函數(shù)是ActionScript中用來執(zhí)行計算和返回結果的元素。例如,一個特定的函數(shù)可以計算并返回一個指定數(shù)的平方根。

命令和函數(shù)都可以使用參數(shù)。參數(shù)就是傳遞給命令或函數(shù)的一個值。如gotoAndPlay命令就至少需要一個幀編號或幀標簽作為參數(shù)。求平方根的函數(shù)也需要一個數(shù)值作為參數(shù)。

與命令和函數(shù)不同的是運算符,它們主要是一些符號,而不是字母。例如,+運算符執(zhí)行兩數(shù)相加的操作。

在ActionScript程序中你將會用到大量的命令、函數(shù)和運算符。

3.1.2

變量

要編寫復雜的計算機程序往往需要存儲很多的信息。有時你可能只需要存儲很短暫的時間,例如,如果需要重復執(zhí)行10次相同的命令,你就需要對命令的執(zhí)行次數(shù)進行記數(shù),直到滿10次為止。

所有的編程語言都使用變量來存儲信息。一個變量由兩部分構成:變量名和變量的值。

1.變量名

變量名通常是一個單詞或幾個單詞構成的字符串,也可以是一個字母。總的來說,你需要盡可能地為變量指定一個有意義的名稱。

例如,如果你要使用變量存儲用戶的姓名,用userName作為變量名將是一個很好的選擇。如果你使用n作變量名,似乎太短了一點;如果使用name,又可能與影片中其他對象的名稱相混淆。

在ActionScript中為變量指定變量名時已經形成了一種不成文的規(guī)范,就是變量名通常以小寫字母開頭,當一個新的單詞出現(xiàn)時,大寫這個新單詞的第一個字母,如userName,長一點的例子如currentUserFirstName。

變量名中不允許出現(xiàn)空格,也不允許出現(xiàn)特殊符號,但是可以使用數(shù)字。

2.變量類型

你可以用變量存儲不同類型的數(shù)據(jù)。數(shù)字是最簡單的變量類型。

你可以在變量中存儲兩種不同類型的數(shù)字:整數(shù)和浮點數(shù)。整數(shù)沒有小數(shù)點部分,如117、-3685都是整數(shù)。浮點數(shù)有小數(shù)點部分,如0.1、532.23、-3.7都是浮點數(shù)。

你也可以在變量中存儲字符串,字符串就是由字符組成的序列,可以是一個或多個字符,甚至可以沒有字符,即空字符串。

使用引號定義字符串,使其與其他變量相區(qū)別。如7是一個數(shù)字,而“7”則是一個字符串,這個字符串由一個字符7組成。

在別的編程語言中,你可能需要在程序的開頭部分提前定義程序中要用到的變量的具體類型,但在ActionScript中不需要預先聲明變量,你只需要直接使用它們,F(xiàn)lash在第一次遇到它們的時候會自動為它們創(chuàng)建變量。

另外,變量所能存放的數(shù)據(jù)類型也沒有嚴格的限定,某一變量可以在一個位置存放字符串,而在另一個位置存放數(shù)字。

這種靈活性并不是經常用得到,但是它可以讓程序員們少一些不必要的擔心。

ActionScript程序員不必擔心的另一個問題是廢棄變量的空間回收問題。即當你不再需要使用一個變量的時候,你可能需要收回該變量占用的存儲空間。大多數(shù)現(xiàn)代的計算機語言如ActionScript都可以自動回收空間,所以你也不必擔心了。

除數(shù)字和字符串類型外還有一些別的變量數(shù)據(jù)類型。例如,數(shù)組可以存放一系列的數(shù)據(jù)而非單個數(shù)據(jù)。

3.1.3

條件

程序本身并不能作出抽象的決定,但是它可以獲取數(shù)據(jù),并對數(shù)據(jù)進行分析比較,然后根據(jù)分析結果執(zhí)行不同的任務。

例如,你想要檢查用戶輸入的名字并確定其至少包含3個字母。程序需要做的事情就是對用戶名作出判斷,如果是3個或更多的字母,就執(zhí)行一種操作;如果不足3個字母則執(zhí)行另一種操作。

這里,作出一個決定需要兩步,第一步是檢查條件是否滿足,如果名稱符合3個字母長度,條件滿足,我們稱條件的值為真(true);否則條件不滿足,我們稱條件的值為假(false)。所有的條件都必須是兩個值中的一種,要么為真,要么為假。要么為真(true)要么為假(false)的數(shù)據(jù)類型稱為布爾(boolean)類型。

決定的第二步是根據(jù)條件為true或為false的情況選擇要執(zhí)行哪些代碼。有時只有一個選項,當條件為true時執(zhí)行該選項;如果條件為false,將不執(zhí)行任何代碼。有時會有兩個相對的選項,條件為true和false時分別執(zhí)行不同的代碼。

例如,你想讓計算機根據(jù)一個變量的值是1、2或3執(zhí)行3種不同的任務,可以像這樣表達:

如果變量的值等于1,執(zhí)行命令1

如果變量的值等于2,執(zhí)行命令2

如果變量的值等于3,執(zhí)行命令3

條件總是建立在比較之上的,你可以比較兩個變量的值以判斷它們是否相等;或者判斷一個是否大于另一個,或是小于另一個。如果變量是字符串類型,你可以比較它們按字典順序排列時的先后次序。

3.1.4

循環(huán)

與人不同,計算機很適合做重復性的工作。一件事情僅僅重復幾次就可能使人厭倦,但是讓計算機重復執(zhí)行成千上萬次它都照樣有耐心。

循環(huán)在每種編程語言中都是一個很重要的部分,ActionScript也不例外。你可以指定一條指令執(zhí)行給定的次數(shù),或者令其執(zhí)行到滿足指定的條件為止。

事實上,條件是循環(huán)中的重要組成部分,整個循環(huán)只需要一個開始點,一個結束點,再加上一個標志循環(huán)結束的條件。

例如,你需要循環(huán)10次,使用一個變量從0開始計數(shù)。每循環(huán)一次,計數(shù)加1。當計數(shù)變量達到10時,循環(huán)結束,程序繼續(xù)執(zhí)行循環(huán)以后的部分。下面的內容代表了一個標準的循環(huán)結構:

(1)循環(huán)以前的命令。

(2)循環(huán)開始,計數(shù)變量置0。

(3)循環(huán)中的命令。

(4)計數(shù)變量加1。

(5)如果計數(shù)變量小于10,執(zhí)行步驟(3)。

(6)循環(huán)以后的命令。

在上面的步驟中,步驟(1)只執(zhí)行1次,步驟(2)表示循環(huán)的開始,步驟(3)、(4)、(5)都將執(zhí)行10次,當循環(huán)結束后,執(zhí)行步驟(6)及以后的部分。

3.2

ActionScript之一角

當你在編寫自己的腳本時,你會用到各種各樣不同的關鍵字和符號,為便于你熟悉腳本的構成,下面先來看一個真實的例子。

這是一段作用于按鈕的腳本,當用戶單擊按鈕時(確切地說是松開按下的按鈕時)執(zhí)行它。其中沒有包含特殊的函數(shù),但是它體現(xiàn)了ActionScript的主要結構。

on(release){

varmyNumber=7;

varmyString="FlashMXActionScript";

for(vari=0;i<myNumber;i++){

trace(i);

if(i+3=={

trace(myString);

}

}

}

腳本的第1行表明當用戶松開按下的按鈕時執(zhí)行大括號中的語句。on(release)結構只能用于按鈕,其他相關的幾種用法如on(press)、on(rollOver)、on(rollout)、on(dragOver)、on(dragOut)等。

第1行末尾的大括號{表示一段相對獨立的代碼段的開始。從{到與之相對的}之間的代碼是一個整體,它們都從屬于按鈕的release事件。

請注意,大括號之后的代碼較之第1行有一個制表符(按一次Tab鍵)的縮進,其后的每行代碼與之具有相同的縮進程度,直到一個新的大括號開始,在新大括號后的語句會比前面的語句增加一個制表符的縮進,以此類推,這種特點與其他編程語言是類似的。Flash會自動將你添加的代碼設置成正確的縮進樣式。

代碼的第1行創(chuàng)建一個名為myNumber的局部變量,并將該變量的值設置為7。下面一行將字符串FlashMXActionScript賦給另一個變量myString。稍后我們會更詳細的介紹變量的兩種類型:局部變量和全局變量。

分號;表示一條指令的結束,在每個完整指令的末尾都應該添加分號。

for代表一個循環(huán)結構的開始,此處的循環(huán)執(zhí)行7(myNumber)次,即令i從0遞增到6,每遞增1便執(zhí)行一次循環(huán)結構中的語句。for后面大括號中的部分即為循環(huán)體。

命令trace將它后面括號中的內容發(fā)送到輸出窗口。我們將在下一部分詳細介紹輸出窗口。

if是一種條件結構,它測試后面的內容i+3==8是否為true,如果為true,則執(zhí)行后面的語句;否則跳過該代碼段。

if結構中只有一個trace命令,它將變量myString的值發(fā)送到輸出窗口。

上例腳本以三個反向大括號}結束,第1個表示if語句的結束,第2個表示for語句的結束,第3個表示整個on(press)段結束。

3.3

輸出窗口

輸出窗口是只在測試Flash影片時出現(xiàn)的一個編程工具,F(xiàn)lash用它來顯示出錯信息或其他的一些重要信息。用戶可以用ActionScript中的trace命令自定義要發(fā)送到輸出窗口中的信息。

輸出窗口在測試程序時非常有用。你可以使用trace命令在輸出窗口中顯示變量的值或者哪一部分ActionScript正在執(zhí)行。

輸出窗口還可以幫助你學習ActionScript。你可以編寫一些小程序,將信息發(fā)送到輸出窗口,這將幫助你看到程序的運行結果。

要想熟悉輸出窗口,最好的方法就是多使用它。下面就來編寫一段小程序,將信息發(fā)送到輸出窗口。

(1)啟動FlashMX。

(2)選中時間軸的第1幀,打開第1幀的動作面板。

(3)使用右上角的菜單將動作面板切換到專家模式。

(4)在腳本編輯區(qū)單擊鼠標,將鼠標光標定位到腳本編輯區(qū)中。

(5)在動作面板中輸入如下ActionScript:

trace("IlikeActionScript!");

此時的動作面板如圖3-1所示。

圖3-1

在動作面板中輸入trace命令

(6)按Ctrl+Enter鍵測試影片,因為舞臺中沒有任何圖像,所以你將看到一個空白窗口,同時出現(xiàn)一個輸出窗口,窗口中顯示:IlikeActionScript!如圖3-2所示。

圖3-2

輸出窗口顯示了trace命令中的信息

和動作面板一樣,輸出窗口右上角也有一個下拉菜單,如圖3-3所示,其中包含了拷貝、清除、查找、保存到文件以及打印等命令。

圖3-3

輸出窗口的下拉菜單

下拉菜單的最后一項命令是“調試級別”,你可以選擇“錯誤”、“警告”、“詳細”中的一種,如果選擇“無”,將不顯示任何信息。

3.4

ActionScript基本語法

前面介紹了程序的基本結構,下面要講解ActionScript中的基本語法。

3.4.1

變量

1.設置變量

在ActionScript中使用變量的方法很簡單,你只需要為變量名分配一個值,例如:

myVariable=7;

該例在創(chuàng)建名為myVariable的變量的同時將其值設置為7,你可以為變量任意取一個名字,而并不需要使用本例中的myVariable。

可以使用輸出窗口查看變量的值,如在一個空白影片第一幀的動作面板中添加如下ActionScript:

x=7;

trace(x);

首先,數(shù)字7被存儲在變量x中;然后,使用trace命令將變量x的值發(fā)送到輸出窗口。影片播放時,輸出窗口中會顯示數(shù)字7。

2.全局變量

根據(jù)變量作用的范圍不同可將變量分為全局變量和局部變量。

全局變量就是可以作用在整個Flash影片的所有深度級別上的變量。你可以在某一幀中設置它,并在其他幀中使用和改變它的值。

你不需要使用特別的方法創(chuàng)建全局變量,像前一個例子一樣,直接設置并使用它,它自動成為一個全局變量。

在許多編程語言中,全局變量可以在任何地方使用。Flash影片使用一個概念叫層級(level)。整修影片的主時間軸作為根(root)層級,影片剪輯是時間軸中的小影片。影片剪輯中的圖形和腳本要比根層級低一個級別。影片剪輯不能直接使用根層級中的全局變量。

3.局部變量

局部變量只能存在于當前腳本中,而在其他幀中它將不再存在。你可以在使用同一個變量名在不同的幀中創(chuàng)建不同的局部變量,它們之間將互不影響。

局部變量可用來創(chuàng)建模塊化的代碼。當前腳本執(zhí)行完時,局部變量將被從內存中刪除;而全局變量將保留到影片結束。

創(chuàng)建局部變量需要使用關鍵字var。例如,下面的ActionScript創(chuàng)建值為15的局部變量myLocalVariable:

myLocalVariable=15;

使用var創(chuàng)建局部變量后,在當前代碼中就不再需要使用關鍵字var了。例如,下面的代碼創(chuàng)建值為20的局部變量myLocalVariable,然后將其值改為8,再發(fā)送到輸出窗口中。

varmyLocalVariable=20;

myLocalVariable=8;

trace(myLocalVariable);

如果沒有特殊的需要,請盡量使用局部變量。

3.4.2

比較

在ActionScript中比較兩個事物是很容易的,要進行比較可以使用標準的數(shù)學符號,如=、<、>等。

1.相等

在ActionScript中用比較運算符對兩個值進行比較。

要比較兩個值是否相等,可以使用連在一起的兩個等于符號(==)。單個等于符號(=)是用來為變量分配值的,并不是比較運算符。

如果要比較變量x的值是否等于7,就可以使用==符號,如下所示:

varx=7;

trace(x==7);

以上代碼使用=符號將變量x設置為7,然后使用==符號對x和7進行比較。

測試這兩行代碼,輸出窗口將顯示“true”。如果將x設置為8或其他數(shù),則會顯示“false”。

==符號還可以用來比較兩個字符串。如下所示:

varmyString="HelloActionScript.";

trace(myString=="HelloActionScript.");

trace(myString=="helloActionScript.");

程序運行時,你將在輸出窗口中看到一個“true”和一個“false”,因為在字符串中字母是要區(qū)分大小寫的。

如果你要比較兩個值是否不等,可以使用!=符號,它的意思是“不等于”。如下所示:

vara=7;

trace(a!=9);

trace(a!=7);

第1個trace語句顯示信息“true”,因為a確實不等于9;第2個trace語句顯示信息“false”。

2.小于和大于

使用標準的數(shù)學符號<和>比較兩數(shù)是否成小于或大于關系。舉例如下:

vara=9;

trace(a<10);

trace(a>5);

trace(a<1);

你將從輸出窗口中看到“true”、“true”和“false”。

符號<=或>=用于比較一個數(shù)是否小于等于或大于等于另一個數(shù),如下所示:

vara=9;

trace(a<=9);

trace(a>=9);

trace(a>=7);

以上3個trace語句都將顯示“true”。

3.4.3

運算

通過運算可以改變變量的值。分別使用算術運算符+、-、*、/執(zhí)行加、減、乘、除操作。

如下所示的ActionScript將值為9的變量x加上一個數(shù)7:

varx=9;

x=x+7;

trace(x);

運算結果為16。

在ActionScript中執(zhí)行運算可以使用一些簡寫方法,如+=運算符將其前后的值相加并將結果賦給它前面的變量。前面的腳本也可以寫成如下的形式:

varx=9;

x+=7;

trace(x);

++運算符與+=運算符類似,但它每執(zhí)行一次,變量的值只增加1,如下面的例子:

varx=9;

x++;

trace(x);

結果顯示10。再看下面的例子:

varx=9;

trace(x++);

trace(x);

結果是9和10。為什么呢?因為第1個trace語句輸出x的當前值9,然后將x加1,輸出x的新值10。

再試一下下面的腳本:

varx=9;

trace(++x);

trace(x);

這次的結果為兩個10。因為將++運算符置于變量前面,將先執(zhí)行運算再返回變量的值。

同理,--運算符執(zhí)行遞減操作,-=運算符在變量當前值的基礎上減去一個數(shù),*=運算符在變量當前值的基礎上乘上一個數(shù),/=運算符在變量當前值的基礎上除以一個數(shù)。

3.4.4

條件

既然現(xiàn)在你已經知道如何比較兩個變量,你就可以將比較結果作為執(zhí)行某些語句的條件。

1.if語句

if語句使你可以使用比較結果控制Flash影片的播放。如下所示的語句判斷X是否等于9,如果比較結果為true,則讓影片跳到第15幀:

if(x==9){

gotoAndPlay(15);

}

if語句以if開始,其后緊跟一個比較表達式,比較表達式通常用一對括號括起來,再后面即是用大括號括起來當比較結果為true時要執(zhí)行的代碼。

2.else

對if語句可以進行擴展,使用else執(zhí)行條件不成立(比較表達式為false)時的代碼,如下所示:

if(x==9){

gotoAndPlay(15);

}else{

gotoAndPlay(16);

}

你也可以使用elseif語句將if語句更推進一步,如下所示:

if(x==9){

gotoAndPlay(15);

}elseif(x==10){

gotoAndPlay(16);

}elseif(x==11){

gotoAndPlay(20);

}else{

gotoAndPlay(25);

}

你可以讓if語句想要多長就有多長,你也可以使用elseif語句對別的變量進行比較,如下所示:

if(x==9){

gotoAndPlay(15);

}elseif(y<20){

gotoAndPlay(16);

}else{

gotoAndPlay(25);

}

3.復合比較

你可以在一個if語句中對幾個比較表達式的值進行判斷,比如說你希望在x為9并且y為20時跳轉到第10幀,可以使用如下所示的腳本:

if((x==9)&&(y==20)){

gotoAndPlay(10);

}

邏輯與運算符&&將兩個比較表達式聯(lián)接在一起成為一個復合表達式,當兩個表達式的值都為true時復合表達式的值才為true。每個比較表達式都需要添加獨立的括號以便Flash能正確識別。在Flash的早期版本中使用and執(zhí)行邏輯與運算,現(xiàn)在已推薦不使用。

你也可以使用邏輯或運算符||將兩個比較表達式聯(lián)接在一起成為一個復合表達式,只要有一個表達式的值為true,復合表達式的值就為true。如下所示:

if((x==7)||(y==15)){

gotoAndPlay(20);

}

在該腳本中,只要x為7或者y為15,或者兩者都成立,結果都是跳轉到第20幀。只有當兩者都不成立時,才不會執(zhí)行gotoAndPlay命令。在Flash的早期版本中使用or執(zhí)行邏輯或運算,現(xiàn)在已推薦不使用。

3.4.5

循環(huán)

ActionScript中的循環(huán)要比if語句稍微復雜一點。它的循環(huán)結構與C語言中的循環(huán)結構幾乎是一致的。

1.for循環(huán)結構

for結構是主要的循環(huán)結構,其樣式如下所示:

for(vari=0;i<10;i++){

trace(i);

}

運行這段代碼,隨著局部變量I的改變,輸出窗口中將顯示數(shù)字0~9。

for結構中關鍵字for后面的括號中包含3個部分,它們之間用分號隔開。

第1部分聲明一個局部變量,在本例中創(chuàng)建了一個局部變量i并將其設置為0。該部分只在循環(huán)體開始執(zhí)行之前執(zhí)行一次。

第2部分作為一個供測試的條件,在這里,測試i是否小于10。只要滿足該條件,就會反復執(zhí)行循環(huán)體。循環(huán)開始的時候i等于0,它是小于10的,所以循環(huán)得以執(zhí)行。

第3部分是一個運算表達式,每完成一次循環(huán)都將執(zhí)行該表達式一次。在這里,i每次遞增1,然后轉到第2部分對i的新值進行判斷。

大括號中的部分是該循環(huán)的循環(huán)體,每執(zhí)行一次循環(huán)都將執(zhí)行其中的所有命令。我們來看看計算機是如何處理這個循環(huán)的。

聲明變量i并將其值設為0;

判斷條件i<10,結果為true,開始執(zhí)行循環(huán)體;

現(xiàn)在i值為0,trace命令將i值發(fā)送到輸出窗口,輸出窗口顯示0;

第1次循環(huán)結束,回到循環(huán)開始處,i在原來的基礎上遞增1,i值變?yōu)?;

判斷條件i<10,結果為true,繼續(xù)執(zhí)行循環(huán)體;

trace命令將i的值1發(fā)送到輸出窗口;

然后i再加1,這樣循環(huán)下去直到執(zhí)行完10次循環(huán);

回到循環(huán)開始處,i在原來的基礎上遞增1,i值變?yōu)?0;

判斷條件i<10,結果為false,結束循環(huán),開始執(zhí)行for結構后面的代碼。

2.其他形式的循環(huán)結構

for循環(huán)是最常用的一種循環(huán)結構,除for循環(huán)之外還有while循環(huán)和do…while循環(huán)。

while循環(huán)的例子如下所示:

i=0;

while(i!=10){

trace(i);

i++;

}

while循環(huán)看起來似乎要比for循環(huán)簡單一些,從結構上看甚至與if語句還有一些相似。只要while后面括號中的條件成立,循環(huán)就會一直進行下去,所以在while循環(huán)體中需要有改變條件的語句,以使條件最終能夠為false,完成循環(huán),如上例中的i++。

與while循環(huán)相似的是do…while循環(huán),如下所示:

i=0;

do{

trace(i);

i++;

}while(i!=10);

除了測試條件的位置不同,while循環(huán)和do…while循環(huán)幾乎是一樣的。while循環(huán)在循環(huán)體之前測試條件,do…while循環(huán)在循環(huán)體之后測試條件,所以do…while循環(huán)至少要執(zhí)行一次,而while循環(huán)有可能一次也不執(zhí)行。

3.跳出循環(huán)

所有的循環(huán)結構都可以使用兩個命令改變循環(huán)的執(zhí)行流程,一個命令是break,另一個命令是continue。break命令終止循環(huán),并跳到循環(huán)結構后面的語句處執(zhí)行;continue命令終止本輪循環(huán)但不跳出循環(huán),進而執(zhí)行下一輪循環(huán)。

使用break和continue的例子都比較復雜,另外,還有一種特殊的for…in循環(huán)結構,在用到它們的時候我們再詳細講解。

3.4.6

函數(shù)

到現(xiàn)在為止,我們都是將腳本放在影片的第1幀中。如果程序相當復雜,再放在同一幀中就使腳本顯得太龐大了。

函數(shù)使你可以組織需重用的代碼,并放在時間軸中,例如:

functionmyFunction(myNum){

varnewNum=myNum+5;

returnnewNum;

}

函數(shù)以關鍵字function開頭,function后面是函數(shù)名。與變量名相似,你可以指定自己的函數(shù)名,最好將函數(shù)名取得有意義一些。

函數(shù)名后面的括號容納該函數(shù)的參數(shù),所謂參數(shù)也是一個變量,它的值在調用該函數(shù)時予以指定。一個函數(shù)可以有若干參數(shù),也可以沒有參數(shù)。無論有沒有參數(shù),函數(shù)名后都應緊跟一對括號。

大括號中的部分是函數(shù)體,在函數(shù)體中創(chuàng)建了一個局部變量newNum,將myNum加5的結果設置為newNum的值。如果你將10作為參數(shù)傳遞給該函數(shù),newNum的值就是15。

return命令僅用于函數(shù)中,使用return結束一個函數(shù)并返回函數(shù)值。此處,newNum是用return命令返回的函數(shù)值。

要使用函數(shù),就需要調用它,如下所示:

vara=myFunction(7);

該語句創(chuàng)建一個新的局部變量a,將7作為參數(shù)調用函數(shù)myFunction,并將函數(shù)返回的結果作為變量a的值。

被調用的函數(shù)開始運行,創(chuàng)建一個局部變量myNum,將7作為myNum的值,然后執(zhí)行函數(shù)體內的代碼,使用return命令將newNum的值12返回給函數(shù)的調用者。這時,a的值變?yōu)?2。

函數(shù)最大的作用體現(xiàn)在它可以重復使用。如下所示的3行代碼產生3個不同的結果:

trace(myFunction(3));

trace(myFunction(6));

trace(myFunction(8));

運行以上代碼,你將得到結果8、11和13。

使用函數(shù)還有一個好處就是可以只改變函數(shù)中的一處,從而影響所有調用該函數(shù)的命令。例如,將函數(shù)myFunction中的varnewNum=myNum+5改成varnewNum=myNum+7,上面3個調用該函數(shù)的命令的結果將變成10、13和15

3.4.7

點語法

ActionScript中一個很重要的概念是點語法。點語法也是很多面向對象的編程語言中用來組織對象和函數(shù)的方法。

假設你想求一個數(shù)的絕對值,F(xiàn)lash中有一個內置的絕對值函數(shù),它包含在ActionScript的“對象”/“核心”/“Math”/“方法”中。要使用絕對值函數(shù),首先要使用對象名,即Math,然后是方法名abs,它們之間用符號“.”隔開,具體表示方法如下所示:

vara=Math.abs(-7);

點語法的另一個用途是指定影片剪輯的屬性。如下面的語句將影片剪輯myMC的_alpha(透明度)屬性設置為50%:

myMC._alpha=50;

你還可以在影片剪輯中使用點語法定位根(root)中的一個全局變量。如果你在主時間軸中創(chuàng)建了一個全局變量globelVar,而要在影片剪輯中使用這個全局變量,可以使用如下的語句:

trace(_root.globleVar);

如果你現(xiàn)在對對象、影片剪輯屬性、層級之類的概念還不熟悉,不用著急,在以后的內容中我們將對它們進行更深入的講解。

3.4.8

注釋

我們可以在Flash的動作面板中添加注釋,注釋就是程序中并不參與執(zhí)行的那些代碼。它可以用來提醒你某些代碼的作用,方便你組織和編寫腳本。一個注釋的例子如下所示:

//將影片剪輯myMC的透明度設置為50%

myMC._alpha=50;

該例的第1行是注釋,注釋以雙斜線//開頭,在//后面你可以輸入任意的文本和符號,F(xiàn)lash會自動將注釋部分用灰色標示。

上例是將注釋專門放在一行中,你也可以將注釋放在一行代碼的后面,如下所示:

myMC._alpha=50;

//將影片剪輯myMC的透明度設置為50%

只要使用//符號,F(xiàn)lash就會忽略它后面的部分。

3.5

調試腳本

無論在編寫程序時有多么細心,每個程序員都避免不了要調試程序。要學好ActionScript,你就得熟練掌握調試程序的方法。在FlashMX中調試程序有3種方法:邏輯推斷、向輸出窗口發(fā)送信息和使用腳本調試器。

3.5.1

邏輯推斷

許多程序錯誤其實很簡單,也很容易解決,并不需要專門的調試工具。當程序出現(xiàn)錯誤時,你應對錯誤出現(xiàn)在哪里有一個大致的把握。

就算你不知道問題出在哪里,但通過細心閱讀代碼,你也有可能找到它。你可以思考一下,你要實現(xiàn)的效果是什么?現(xiàn)在的效果與你的設想有多大差距?是什么原因造成了這種差距?修改哪些部分有望改正這種錯誤?經過反復思考、修改和調試,你對程序的理解就會不斷加深,你的程序也會越來越趨于正確。

沒有人比你更了解你自己的程序,所以對你來說,你編寫的程序最先宜采用邏輯推斷的方法進行調試。還有一些錯誤或漏洞隱藏得比較深,這就需要借助于調試工具。

3.5.2

輸出窗口

輸出窗口是一個簡單而實用的調試工具,在程序中可以使用trace命令將特定的信息發(fā)送到輸出窗口中,這些信息可以幫助你了解代碼的運行情況。

前面我們已經介紹過輸出窗口,這里就不再贅述了。

3.5.3

調試器

調試器是一個更專業(yè)的調試工具,它是FlashMX中的一個窗口,通過調試器可以查看影片中的各種數(shù)據(jù)以及ActionScript代碼的運行情況。

選擇“控制”→“調試影片”命令,或按快捷鍵Ctrl+Shift+Enter,開始調試影片。與測試影片不同的是,調試影片時多了一個調試器窗口,如圖3-4所示。

圖3-4

調試器窗口

調試器窗口中包含很多窗格,在左邊的窗格中可以檢查Flash影片中不同類型的對象,右邊的窗格顯示影片中所有的ActionScript。

在調試器窗口中可以設置斷點,斷點即是為某行代碼添加的一個標記,當調試影片時,影片會自動在斷點處停止,允許你查看當前包括變量值在內的的影片狀態(tài)。使用斷點可以使你逐行地執(zhí)行代碼,對每行代碼的運行結果進行觀察和分析。

初學ActionScript的時候,你可能并不需要使用調試器;但是當你成長為一名經驗豐富的程序員時,你就會發(fā)現(xiàn)它對你是非常有用的。第4章

影片播放控制

控制影片播放流程的命令有許多,如下所示:

stop:使影片停止在當前時間軸的當前幀中。

play:使影片從當前幀開始繼續(xù)播放。

gotoAndStop:跳轉到用幀標簽或幀編號指定的某一特定幀并停止。

gotoAndPlay:跳轉到用幀標簽或幀編號指定的某一特定幀并繼續(xù)播放。

nextFrame:使影片轉到下一幀并停止。

prevFrame:使影片回到上一幀并停止。

stop命令常常用在幀動作中,以使影片停止并等待用戶控制。其他命令常常用在按鈕的事件處理函數(shù)中。

4.1

使影片停止

最簡單的ActionScript恐怕要算stop命令了,當執(zhí)行stop命令的時候,影片在當前的幀處停止播放。

你可以將stop命令放到時間軸的某一關鍵幀中,在stop后面需要緊跟一對括號,如下所示:

stop();

執(zhí)行stop命令時,影片只是暫停在當前幀,在影片中嵌入的影片剪輯或圖形元件繼續(xù)播放,停止的僅僅是主時間軸中的動畫。

要讓影片繼續(xù)播放,需要用到ActionScript的另一個命令play。play命令使影片轉到下一幀并繼續(xù)播放。

我們將在按鈕部分介紹play命令,下面以一個例子的形式介紹stop命令的使用,其操作步驟如下:

(1)啟動FlashMX,在時間軸中插入兩個空白關鍵幀,使時間軸包含3個空白關鍵幀。

(2)在3個關鍵幀中使用文本工具分別添加字符1、2、3。

(3)選中第2幀,按F9鍵打開動作面板,如圖4-1所示,在其中添加如下的ActionScript:

stop();

圖4-1

第2幀和它的動作面板

(4)按Ctrl+Enter測試影片,影片播放到第2幀即停止,你將看不到第3幀。

4.2

跳轉到指定幀

另一個基本的ActionScript命令是gotoAndPlay。該命令使影片從當前幀跳轉到指定的任意一幀??梢杂脦幪柣驇瑯撕炛付ㄒ粠?,如下所示:

gotoAndPlay(9);

gotoAndPlay("myFrame");

如果影片中不止一個場景,你也可以指定要跳轉到的特定場景的特定幀。如果gotoAndPlay命令中只有一個參數(shù),F(xiàn)lash將認為它代表某個幀;如果有兩個參數(shù),第1個參數(shù)將作為場景名,第2個參數(shù)代表該場景中的幀。如下所示:

gotoAndPlay("myScene",1);

它表示跳轉到場景myScene的第1幀繼續(xù)播放。

gotoAndPlay命令使影片跳轉到某一特定幀并從該幀開始繼續(xù)播放,如果要使影片跳轉到某一特定幀并在該幀位置停止,就應該使用gotoAndStop命令。它的使用方法與gotoAndPlay命令相似,僅僅是跳轉幀后執(zhí)行的動作不同罷了。

還有兩個實現(xiàn)跳轉幀動作的命令,它們是nextFrame和prevFrame。nextFrame命令使影片從當前位置轉到下一幀并停止,prevFrame命令使影片從當前位置轉到上一幀(即回退一幀)并停止。它們后面都必須使用括號。

要了解這些命令究竟如何使用,最好的方法就是使用按鈕,下面我們就來看看如何創(chuàng)建按鈕。

4.2.1

創(chuàng)建按鈕

要創(chuàng)建按鈕,可以選擇“插入”→“新建元件”命令或按快捷鍵Ctrl+F8,你將看到一個“創(chuàng)建新元件”對話框,在該對話框中你可以在影片剪輯、按鈕和圖形這3種類型中選擇要創(chuàng)建元件的類型。

選擇按鈕類型,單擊“確定”按鈕,F(xiàn)lash窗口將由主場景切換到按鈕元件的編輯場景。按鈕元件的時間軸中有4個幀,分別是彈起(Up)、指針經過(Over)、按下(Down)、和點擊(Hit),它們代表了按鈕的3種狀態(tài)和熱區(qū)(熱區(qū)的形狀代表了按鈕能在什么范圍內感應到鼠標的動作)。

如果你在按鈕的第1幀中放置一個圖形,而在其他3個幀中不放置任何東西,那么該按鈕的3種狀態(tài)和熱區(qū)將是一樣的。

要使按鈕顯示不同的狀態(tài),就需要在它的不同關鍵幀中創(chuàng)建不同的圖形或影片剪輯。圖4-2顯示了一個按鈕的4個幀。

圖4-2

按鈕元件的4個幀

完成對按鈕的創(chuàng)建后,可以單擊舞臺上方的場景名“場景1”回到主場景。

按F1或Ctrl+L打開庫面板,你將看到庫中增加了一個按鈕,用鼠標將它拖到舞臺中。

4.2.2

為按鈕添加腳本

要為按鈕添加腳本,首先得選中該按鈕,然后按F9鍵打開動作面板。你也可以在該按鈕上單擊鼠標右鍵,在彈出的快捷菜單中選擇“動作”命令,這樣也可以打開按鈕的動作面板。

在專家模式下輸入如下腳本:

on(release){

trace("Youareclikingme!");

}

按鈕的腳本有特殊的語法,即必須以關鍵字on開頭,以on開頭的代碼是一種事件處理函數(shù),即當特定事件發(fā)生時要執(zhí)行的代碼。在這里,特定事件就是release(松開鼠標),它是按鈕最常用的事件。

按鈕事件還有press、releaseOutside、rollOver、rollOut、dragOver、dragOut以及keyPress等。press是按下鼠標事件,它在release事件之前發(fā)生,releaseOutside是在按鈕上按下鼠標,并且在按鈕外松開鼠標的事件,rollOver是鼠標指針移到按鈕所在熱區(qū)的事件,rollOut是鼠標從按鈕熱區(qū)移出的事件,dragOver是在鼠標指針位于按鈕上方并已按下按鈕的情況下,滑出按鈕再滑回按鈕的事件,dragOut是當鼠標指針位于按鈕內部,按下按鈕然后滾動出按鈕區(qū)域的事件,keyPress是按鈕響應在鍵盤上按下某些鍵時的事件。

某種事件的發(fā)生,會觸發(fā)相應事件處理函數(shù)開始運行,上例中使用trace語句將事件信息發(fā)送到輸出窗口中,使你可以更好地了解具體按鈕事件的含義。

4.3

練習:演示文檔

用Flash可以實現(xiàn)演示文檔的功能,演示文檔相當于我們常說的幻燈片,它可以進行逐頁展示。如果不使用腳本,F(xiàn)lash動畫會很快地播放每一幀,要用Flash制作演示文檔就得對Flash添加控制命令。

我們用腳本使每一幀停止,要跳轉到別的幀,就需要使用按鈕。

制作演示文檔的操作步驟如下:

(1)啟動FlashMX,編輯前5幀。

(2)在文檔中創(chuàng)建5個按鈕,從庫面板中可以看到它們。

(3)打開主時間軸第1幀的動作面板,其中添加了如下語句:

stop();

影片播放時,會停止在第一幀上。

(4)為圖層2的第1幀和第5幀分別添加幀標簽begin和end,如圖4-3所示。

圖4-3

第1幀和第5幀的幀標簽

(5)選中第1幀中的“開始”按鈕,打開其動作面板,在其中添加如下語句:

on(release){

nextFrame();

}

單擊“開始”按鈕,停止在第1幀的影片會跳轉到第2幀并停止。

(6)分別在第2~4幀的相同位置添加按鈕“首頁”、“上一頁”、“下一頁”、“末頁”。由于第5幀后面沒有別的幀,所以只添加“上一頁”和“首頁”兩個按鈕。

(7)為所有“首頁”按鈕添加腳本:

on(release){

gotoAndStop("begin");

}

單擊“首頁”按鈕,影片將跳轉到幀標簽為begin的那一幀并停止,即第1幀。這里也可以用1替代"begin"。

(8)為所有“上一頁”按鈕添加腳本:

on(release){

prevFrame();

}

單擊“上一頁”按鈕,影片將從當前幀跳轉到前一幀并停止。

(9)為所有“下一頁”按鈕添加腳本:

on(release){

nextFrame();

}

單擊“下一頁”按鈕,影片將從當前幀跳轉到下一幀并停止。

(10)為所有“末頁”按鈕添加腳本:

on(release){

gotoAndStop("end");

}

單擊“末頁”按鈕,影片將從當前幀跳轉到幀標簽為end的那一幀并停止,在此處也即是第5幀。

(11)按Ctrl+Enter鍵測試一下影片,單擊各個按鈕試一下效果。這些添加了ActionScript的按鈕是不是變得非常聽話?

控制影片剪輯

影片剪輯是Flash中最重要的一種元件,對影片剪輯的控制是ActionScript的最重要功能之一。從根本上說,F(xiàn)lash的許多復雜動畫效果和交互功能都與影片剪輯的運用密不可分。

使用點語法或方括號可以定位影片剪輯。使用方括號時可以使用由變量表示的影片剪輯實例名,這是它相對于點語法的優(yōu)點。

可以用腳本控制影片剪輯的各種動作,也可以在影片剪輯的事件處理函數(shù)中控制主時間軸和別的影片剪輯。影片剪輯最重要的兩個事件是load和enterFrame。

5.1

控制影片剪輯的播放動作

設想一個Flash動畫,它的主場景中只有一個幀,舞臺中只有一個影片剪輯,影片剪輯中并沒有ActionScript。如何才能控制影片剪輯的播放動作呢?

要控制一個影片剪輯,首先應該為影片剪輯命名。容易混淆的是,庫面板中的影片剪輯本身有一個名稱,這里要命名的是場景中影片剪輯實例的名稱。它們可以相同,也可以不相同。如果你在場景中創(chuàng)建了同樣的影片剪輯的多個實例,那么就需要將每個實例以不同的名稱命名,才能用ActionScript對每一個實例進行控制。如果不需要對影片剪輯進行控制,也就不需要為影片剪輯的實例命名。

從本例文件中,你將看到庫面板中只有一個影片剪輯rollmc,場景中創(chuàng)建了一個rollmc的實例。你還可以再從庫中拖出若干個rollmc的實例將

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論