版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
8.1關于動作腳本8.2動作面板8.3動作腳本應用體驗8.4動作腳本編程基礎8.5元件實例的命名和路徑的引用8.6常用動作腳本8.7程序結構控制8.8使用組件、行為與模板課堂實踐疑難解析課外拓展第8章動作腳本ActionScript 8.1關于動作腳本
8.1.1動作腳本的概念
所謂動作腳本,是Flash環(huán)境下的一種面向對象的編程語言,即ActionScript語言,中文直譯為“動作腳本”,目前的版本是ActionScript2.0。
ActionScript具有和通用的JavaScript相似的結構,采用面向對象編程的思想,利用事件對程序進行驅動,以動畫中的關鍵幀、按鈕或影片剪輯實例作為編程對象來對ActionScript進行定義和編寫。例如,用鼠標單擊按鈕控制動畫的暫停,此時按鈕被作為編程對象,在按鈕上添加了控制動畫暫停的腳本程序,驅動事件就是用鼠標單擊按鈕。當用鼠標單擊按鈕這個事件發(fā)生時,就會執(zhí)行按鈕上的腳本程序,腳本程序執(zhí)行的結果使得動畫的播放暫停。8.1.2動作腳本的特點
與任何計算機編程語言一樣,ActionScript遵循一套語法規(guī)則,保留了關鍵字,提供了運算符,并且允許使用變量存儲數(shù)據(jù)和獲取信息。另外,動作腳本包含很多不同用途的內置對象和函數(shù),并且允許用戶創(chuàng)建自定義的對象和函數(shù)。
在Flash文檔中編寫腳本時,只允許在3個地方添加動作腳本:關鍵幀、影片剪輯實例、按鈕實例,只有這三者才是Flash的編程對象。動作腳本的執(zhí)行必須要有驅動事件。所謂驅動事件,就是指播放SWF文件時發(fā)生的事情。當驅動事件發(fā)生時,動作腳本才會被執(zhí)行。關鍵幀、影片剪輯實例和按鈕實例這三種編程對象的驅動事件各不相同。在關鍵幀上添加的動作腳本能且只能被一種事件驅動,這就是“進入幀”事件,即當播放頭進入該幀,該幀被播放時幀上的腳本才會被執(zhí)行;在按鈕實例和影片剪輯實例上添加的動作腳本,它們的執(zhí)行要依靠驅動事件發(fā)生,例如,移動鼠標、鼠標在按鈕上單擊、加載影片剪輯、卸載影片剪輯等。(按鈕實例和影片剪輯實例的驅動事件詳見8.2.2節(jié)。) 8.2動作面板
8.2.1動作面板的組成
在Flash中使用“動作”面板,可以為關鍵幀、影片剪輯實例和按鈕實例添加或編輯動作腳本。執(zhí)行【窗口】→【動作】命令或按F9功能鍵,展開“動作”面板,如圖8-1所示。圖8-1“動作”面板圖8-2“查找和替換”對話框8.2.2動作腳本的添加方法
1.在關鍵幀上添加動作腳本
在關鍵幀上添加動作非常簡單,首先選擇要添加動作的關鍵幀,然后在“腳本窗格”中添加動作即可。
2.在按鈕實例上添加動作腳本
在按鈕上添加動作,首先要在按鈕上添加on()函數(shù)。on()是鼠標事件處理函數(shù),用于處理鼠標事件。on()函數(shù)的語法格式為:
on(鼠標事件){
響應鼠標事件要執(zhí)行的程序段
}
這段腳本的意思是,當鼠標事件發(fā)生時,就執(zhí)行大括號內的腳本;如果鼠標事件沒有發(fā)生,那么大括號內的腳本永遠不會被執(zhí)行。在Flash中,鼠標事件,即按鈕實例的驅動事件主要有以下幾種。
①press:在按鈕上單擊鼠標左鍵。
②release:在按鈕上單擊鼠標左鍵并釋放。
③releaseOutside:在按鈕上按下鼠標左鍵,不松手將鼠標移到按鈕之外,此時再釋放鼠標。
④rollOver:鼠標指針滑入按鈕。
⑤rollOut:鼠標指針從按鈕上滑出。
⑥dragOver:按住鼠標左鍵不松手,接著將鼠標指針滑入按鈕。
⑦dragOut:按住鼠標左鍵不松手,接著將鼠標指針滑出按鈕。
⑧keyPress"<key>":按下鍵盤上指定的按鍵。在按鈕上添加腳本的具體操作步驟是:
(1)選中要添加動作的按鈕。
(2)打開“動作”面板,單擊“添加動作”按鈕,選擇【全局函數(shù)】→【影片剪輯控制】→【on】函數(shù),此時彈出on()函數(shù)的參數(shù)設置菜單,用于選擇鼠標事件,如圖8-3所示,雙擊參數(shù)提示菜單中的某一個鼠標事件即可。圖8-3添加on()函數(shù)
(3)把鼠標指針插入到大括號{}之間,添加相應鼠標事件要執(zhí)行的動作腳本。
注意:一般來說,腳本添加完以后,最好單擊“自動套用格式”按鈕,把“腳本窗格”中的腳本格式轉換成規(guī)范的書寫格式,便于程序代碼的閱讀理解。如果程序代碼中有語法錯誤,則會彈出一個提示警告窗口,如圖8-4所示。(動畫的調試詳見9.1節(jié)。)圖8-4語法錯誤警告窗口
3.在影片剪輯實例上添加動作腳本
在影片剪輯實例上添加腳本的方法與按鈕類似,不同之處在于影片剪輯實例使用的事件處理函數(shù)是onClipEvent()。onClipEvent()函數(shù)的語法格式為:
onClipEvent(系統(tǒng)事件){
響應系統(tǒng)事件要執(zhí)行的程序段
}在Flash中,系統(tǒng)事件,即影片剪輯實例的驅動事件,主要有以下幾種。
①load:載入影片剪輯時啟動大括號內的動作。
②unload:在時間軸中刪除影片剪輯實例時啟動動作。
③enterFrame:只要影片剪輯在播放,就不斷地啟動動作。
④mouseMove:每次移動鼠標時啟動動作。
⑤mouseDown:當按下鼠標左鍵時啟動動作。
⑥mouseUp:當釋放鼠標左鍵時啟動動作。
⑦keyDown:當按下某個鍵時啟動動作。
⑧keyUp:當釋放某個鍵時啟動動作。
⑨data:在使用loadVariables()或loadMovie()動作時接收到數(shù)據(jù)就啟動動作。 8.3動作腳本應用體驗
下面通過一個動作腳本案例,初步體驗動作腳本的功能及使用方法。
案例8-1:ILOVEYOU
案例展示
打開隨書光盤中“第8章/案例1”文件夾下的“ILOVEYOU.swf”文件,觀看動畫效果。動畫剛進場時是靜止的,單擊按鈕,動畫才開始播放,出現(xiàn)文字和愛心的動畫效果,如圖8-5所示。圖8-5ILOVEYOU
案例分析
打開該文件夾下的“ILOVEYOU.fla”源文件,在時間軸上可以看到按鈕放在“button”圖層,文字動畫直接在場景中使用遮罩技術完成,愛心動畫引用一個名為“heartmc”的影片剪輯,放在“ball”圖層,動畫在時間軸上的布局如圖8-6所示。圖8-6時間軸布局打開“動作”面板,展開“腳本導航器”窗格,如圖8-7所示。圖8-7“動作”面板之“腳本導航器”在“腳本導航器”中可以看到,該文檔給影片剪輯“heartmc”實例命名為“ball”,在三個地方添加了動作腳本。選擇添加腳本的項目,查看腳本代碼。
1)在button圖層第1幀上添加的腳本
stop();
當播放頭進入第1幀時,就會執(zhí)行其上的腳本stop()。stop()腳本的功能就是停止時間軸的播放,動畫停止在第1幀,所以在主場景中直接完成的文字動畫剛開始是靜止的。
2)在影片剪輯“heartmc”時間軸的第1幀上添加的腳本
stop();
當影片剪輯時間軸上的播放頭進入第1幀時,stop()使影片剪輯停止在第1幀,所以影片剪輯剛進場時也是靜止的。
說明:由于影片剪輯有自身獨立的時間軸,影片剪輯的播放不受主場景時間軸的控制,所以在主場景時間軸上添加的動作腳本stop(),停止的是主場景時間軸的播放,影片剪輯不受影響。如果要停止影片剪輯的播放,必須在影片剪輯自身的時間軸上添加腳本stop()。同理,腳本play()可以控制動畫的播放,其使用方法與stop()相同。
3)在按鈕button上添加的腳本
on(release){
play();
ball.play();
}
如果使用按鈕來控制動畫的交互,首先必須為其添加on()函數(shù)。當在按鈕上單擊鼠標并釋放時,就會執(zhí)行大括號內的動作。play()使主場景中停止的動畫從當前位置(即第1幀)繼續(xù)播放;ball.play()使影片剪輯實例ball從當前位置(即第1幀)繼續(xù)播放。因此,單擊按鈕并釋放鼠標后,可看到文字和愛心的動畫效果。 8.4動作腳本編程基礎
8.4.1動作腳本基本語法
與任何語言一樣,動作腳本具有一定的語法規(guī)則,用戶必須遵守這些語法規(guī)則才能創(chuàng)建可正確編譯和運行的腳本。
1.區(qū)分大小寫
在Flash中,對于變量和常數(shù)是嚴格區(qū)分大小寫的,區(qū)分大小寫是減少程序人為和輸入錯誤的有效手段,也是Flash的趨勢。當遵循了Flash推薦的大小寫時,在默認情況下,這些屬性和方法名會以藍色高亮顯示。用戶應該養(yǎng)成按Flash推薦的大小寫來使用函數(shù)、屬性和方法等。例如,gotoAndPlay()是Flash推薦的寫法,而gotoandplay()則不是。
2.點語法
點語法(.)是動作腳本中非常重要的語法,它是用來引用對象的屬性和方法的。點語法典型的使用形式是以對象名稱或實例名稱開頭,后面跟著一個點,最后是一個屬性或方法名。例如,starMC._alpha,表示影片剪輯實例starMC的_alpha屬性。另外,點語法還用于標識對象的目標路徑。例如,主場景時間軸中有影片剪輯實例ballx1,ballx1影片剪輯元件又引用ballx2影片剪輯實例,則當要在主場景時間軸中引用ballx2的X坐標時,可以使用表達式ballx1.ballx2._x。點語法還使用兩個特殊的別名:_root和?_parent。
_root是指主時間軸,可以使用它來表示一個絕對目標路徑。例如,上例的表達式可以表示成絕對路徑的形式?_root.ballx1.ballx2._x。
_parent引用嵌套當前影片剪輯的影片剪輯,即當前影片剪輯的上一級,可以使用它來表示一個相對路徑。例如,上例中在ballx2中有腳本?_parent.stop(?),這里的?_parent是指ballx2實例的上一級,即ballx1實例,所以腳本?_parent.stop()表示停止ballx1實例的播放。
3.大括號
如果某些腳本需要作為一個整體存在來執(zhí)行,為了明確表示這些腳本要作為一個“腳本塊”來使用,需要把這些腳本用一對大括號{}括起來。
例如,按鈕事件處理函數(shù)的使用:
on(release){
setProperty("_root.mypao",_alpha,"50");
play();
}
當單擊按鈕并釋放鼠標時,首先執(zhí)行setProperty("_root.mypao",_alpha,"50")腳本,然后再執(zhí)行play()。大括號中的這兩個腳本作為一個整體來執(zhí)行,絕對不會只執(zhí)行其中的某一個腳本。
4.小括號
小括號()用于函數(shù)的定義和調用。在定義和調用函數(shù)時,函數(shù)的參數(shù)必須用一對小括號括起來。
例如,函數(shù)定義如下:
functioncirarea(r:Number){
s=Math.PI*r*r;
returns;
}
函數(shù)名cirarea后面是函數(shù)的參數(shù)r的類型說明,必須使用小括號括起來定義。
5.分號
分號表示一條語句的結束。例如:
varx=100;
vary=1;
如果不使用分號,F(xiàn)lash也能正確地編譯腳本,但用戶應該從一開始就要養(yǎng)成良好的編程習慣。
6.關鍵字
動作腳本保留一些單詞用于該程序語言中的特定用途,因此不能將它們用作標識符,例如內建函數(shù)、屬性名和方法名等。
7.常數(shù)
常數(shù)是其值永遠不變的一些常量。在Flash中,有若干種形式的常數(shù),有的常數(shù)是以類的屬性的形式存在的,例如,圓周率的值就是一個常數(shù),可以使用Math.PI來表示,PI是內建類Math的一個屬性;而有的常數(shù)是以布爾值的形式存在的,例如false和true。
8.注釋
在編輯較復雜的動作腳本時,建議在編程的過程中使用注釋,注釋有助于腳本內容的閱讀和理解。注釋可以單獨占一行,也可以寫在代碼行的后面。注釋以雙斜杠(//)開頭。
例如:
//聲明一個變量x,用作X坐標值的偏移量
varx=1;
varn=20; //給變量n賦初值,作循環(huán)計數(shù)器使用除了可以使用//來添加單行注釋外,還可以創(chuàng)建“注釋塊”的注釋。注釋塊以/*開始,以*/結束,“注釋塊”中的所有內容都將被當做Flash的注釋。例如:
/*
setProperty("snow",_x,random(500));
setProperty("snow",_y,random(400));
setProperty("snow",_rotation,random(360));
*/
//開始復制主場景中的“snow”實例,并把復制出來的實例的名稱動態(tài)命名為snow加上i,
//并把生成的實例放在深度為i的層上
duplicateMovieClip("snow","snow"+i,i);8.4.2數(shù)據(jù)類型
1.字符串(String)
字符串是由字母、數(shù)字或標點符號組合在一起的字符序列。在動作腳本中輸入字符串時必須將其放在單引號或雙引號之間。字符串被當作字符而不是變量進行處理。例如:
name="彥青";
在連接兩個字符串時,可以使用“+”運算符進行連接,例如:
say="Hello,"+name+"!";
執(zhí)行這兩條腳本命令后,變量say的內容就是字符串“Hello,彥青!”。如果字符串中本身就包含有雙引號,為了不使雙引號的配對發(fā)生錯誤,需要在單純字符雙引號前面添加“\”,這稱為“轉義”。例如:
text="他說\"OK!\"";
在上面的字符串中,開始和結束的雙引號用來說明這是一個字符串數(shù)據(jù)類型,反斜杠字符(\)后面的雙引號是字符串中的內容。
一般情況下,單引號與雙引號是通用的,通過把單引號和雙引號結合起來使用,可以避免使用“轉義”字符。例如,上面的字符串也可以這樣表示:
text='他說"OK!"';
2.數(shù)字(Number)
數(shù)字數(shù)據(jù)類型是雙精度浮點數(shù)。它主要使用加(+)、減(-)、乘(*)、除(/)、取模(%)、遞增(++)和遞減(--)等算術運算符來處理數(shù)據(jù),也可以使用內置的Math和Number類的方法來處理數(shù)據(jù)。例如:數(shù)字100的平方根可以使用Math類表示為Math.Sqrt(100)。
3.布爾值(Boolean)
布爾值也可稱為邏輯值,它的運算結果非常簡單,只有true(真)和false(假)兩種結果。布爾數(shù)據(jù)類型的變量常常被用作控制腳本執(zhí)行的開關。例如:
if(n>=50){
stop();
}
說明:在Flash中,數(shù)據(jù)0的布爾值被認為是false,所有非零數(shù)據(jù)的布爾值被認為是true。
4.對象
對象是屬性的集合。每個屬性都有名稱和值。屬性值可以是任何數(shù)據(jù)類型,甚至可以是對象數(shù)據(jù)類型。這樣就可以把一個對象嵌套在另一個對象之中。要指定對象和它們的屬性,可以使用點(.)語法。例如,student是class的屬性,sex是student的屬性,定義一個“男”同學可以表示為:
class.student.sex="男";
5.影片剪輯
影片剪輯是惟一引用圖形元素的數(shù)據(jù)類型。影片剪輯MovieClip數(shù)據(jù)類型允許使用MovieClip類的方法控制影片剪輯實例。例如,場景中影片剪輯實例“ball”從庫中取得一個鏈接名為dh的影片剪輯元件,生成名為“ballson”的影片剪輯實例,并將生成的影片剪輯實例附加到實例“ball”中,可以使用影片剪輯的方法attachMovie表示為:
ball.attachMovie("dh","ballson",n);
6.空值(null)
null表示空值數(shù)據(jù)類型,此值意味著“沒有值”,即缺少數(shù)據(jù)。null值可以用在各種情況中,例如,指示變量尚未接收到值,指示變量不再包含值;作為函數(shù)的返回值,表示函數(shù)沒有返回的值;作為函數(shù)的參數(shù),表示省略了一個參數(shù)。
7.未定義類型(undefined)
未定義的數(shù)據(jù)類型有一個值,即undefined,它用于尚未分配值的變量。8.4.3變量
1.命名變量
變量名是一個符合特定規(guī)則要求的字符串,命名變量必須遵守兩個原則:
第一,變量名遵循標識符的命名規(guī)則,即第一個字符必須是字母、下劃線(?_?)或美元符號($),其后的字符必須是字母、數(shù)字、下劃線或美元符號,中間不能包含空格;
第二,變量名不能是關鍵字或動作腳本文本。例如play、if等不能再用作變量名使用。
注意:用戶最好不要將動作腳本語言中已經(jīng)使用的任何元素用作變量名稱,這樣做很可能會導致語法錯誤或意外的結果。
2.聲明變量及變量賦值
當首次定義變量時,最好為該變量指定一個值,這就是變量的初始化。初始化變量有助于在播放SWF文件時跟蹤和比較變量的值。變量的初始化通常在動畫文件的第1幀完成??梢允褂孟旅娴膬煞N方式來聲明變量和為變量賦值。
1)自動數(shù)據(jù)類型指定
在Flash中,不必將變量明確地定義為字符串、數(shù)字或其他數(shù)據(jù)類型。在給變量賦值時Flash可以自動指定其數(shù)據(jù)類型。最普通最簡單的變量賦值形式如下:
variableName=newValue;這個語句表示名為variableName的變量被賦予了值newValue。例如,給變量a1賦值100,可以表示如下:
a1=100;
變量賦值時,F(xiàn)lash首先檢測運算符右側的元素,然后根據(jù)檢測元素的數(shù)據(jù)類型自動確定變量a1的數(shù)據(jù)類型為數(shù)字類型,然后把數(shù)值100賦給變量a1。如果后面還有對變量a1的賦值,賦值操作可以更改a1的數(shù)據(jù)類型。例如:
a1="price";
此時,a1的數(shù)據(jù)類型被更改為字符串。如果以variableName=newValue這種形式為變量賦值時,F(xiàn)lash會根據(jù)賦值數(shù)據(jù)的類型自動為變量指定相應的數(shù)據(jù)類型,這種情況下的變量可以保存任何類型的數(shù)據(jù)。
另外,動作腳本還會在表達式需要時自動轉換數(shù)據(jù)類型。例如:
page="Nextpageis"+20;
執(zhí)行這個語句,F(xiàn)lash首先將數(shù)字20轉換為字符串“20”,并將它添加到第一個字符串的結尾,變量page中保存的是字符串“Nextpageis20”。
2)嚴格數(shù)據(jù)類型指定
使用自動數(shù)據(jù)類型指定變量雖然很方便,變量可以保存任何數(shù)據(jù)類型,但方便的同時也增大了出錯的風險。比如某個變量只能存放數(shù)字,無意中把一個字符串保存在變量中,則在以后使用該變量參與的計算中,可能會導致意想不到的錯誤。
為了避免這種錯誤的發(fā)生,ActionScript2.0引入了變量嚴格指定數(shù)據(jù)類型的概念。在給變量賦值時就明確指定它能且只能保存某種特定的數(shù)據(jù)類型,其聲明形式如下:
varvariableName:DataType=newValue;
上面的變量聲明和賦值也可以分成兩步來完成,代碼如下:
varvariableName:DataType;
variableName=newValue;在這里,var是一個語句,變量名variableName后面跟著一個冒號,冒號后面是為變量指定的數(shù)據(jù)類型DataType。例如:
varold:Number=25;
聲明變量old的數(shù)據(jù)類型是數(shù)字,并給變量賦值25。使用嚴格數(shù)據(jù)類型指定有助于確保不會因為疏忽而為變量指定錯誤的值。使用嚴格數(shù)據(jù)類型指定后,F(xiàn)lash在編譯時會檢查類型指定是否匹配,錯誤時會給出“類型不匹配”的提示。除了為變量嚴格指定數(shù)據(jù)類型外,還可以為函數(shù)中的參數(shù)嚴格指定數(shù)據(jù)類型。例如:
functionsquare(x:Number):Number{
varsquared=x*x;
returnsquared;
}
提示:在為函數(shù)參數(shù)指定數(shù)據(jù)類型時,不使用var語句。
3.變量的作用域
所謂變量的作用域,是指變量在其中已知并且可以引用的區(qū)域。變量的作用域有三種:局部變量(也稱本地變量)、時間軸變量和全局變量。
1)局部變量
局部變量只在聲明它們的函數(shù)體內(兩個大括號{}之間)可用,它是作用范圍最小的變量。要聲明局部變量,必須使用var語句。局部變量的使用范圍只限于函數(shù)體內的腳本,它會在該腳本代碼塊結束時到期。正是這種作用域局限的特征,使得局部變量成為在函數(shù)內用作計數(shù)器的最好選擇,因為在一個函數(shù)內聲明的計數(shù)器i與在另一個函數(shù)內聲明的i沒有任何關系。
例如,函數(shù)Sum的功能是計算變量x從1加到x的累加和,函數(shù)內可以設置一個局部變量i用于控制累加的次數(shù),s用來存放累加和,局部變量i和s的作用范圍僅限于函數(shù)體中。程序代碼如下:
functionSum(x:Number):Number{
vari:Number;
vars:Number;
s=0;
for(i=0;i<=x;i++){
s=s+i;
}
returns;
}局部變量可以有效地防止名稱沖突,名稱沖突可能會導致動作腳本出現(xiàn)錯誤。例如,如果使用name作為局部變量,則可以使用它在某個函數(shù)中存儲員工名稱,而在另一個函數(shù)中存儲實例名稱,因為這個變量是在不同的范圍中運行的,所以它們不會有沖突。
在函數(shù)中使用局部變量是一個很好的習慣,這樣該函數(shù)可以充當獨立的代碼。局部變量只有在它自己的代碼塊中才可更改。如果函數(shù)中的表達式使用全局變量,則在該函數(shù)以外的其他地方也可以更改它的值,這樣也更改了該函數(shù)的運算結果。
2)時間軸變量
盡管局部變量很有用,但很多時候希望變量在整個時間軸內都能被引用。時間軸變量可用于該時間軸上的任何腳本,這樣在不同幀中傳遞值會變得很方便。
例如,在時間軸的第1幀中包含代碼:
varn:Number=1;
vart:Number=100;
第2幀中包含代碼:
n=n+1;第3幀中包含代碼:
if(n<=t){
ball.play();
}else{
stop();
}
在第1幀中定義的變量n和t就是時間軸變量,在第2幀、第3幀上被再次引用。時間軸變量n和t可以在動畫的整個時間軸上被引用。
3)全局變量
如果希望能在整個Flash文檔的不同時間軸之間傳遞值,也就是在不同的時間軸中引用同一個變量,就需要使用全局變量。要定義一個全局變量,需要使用?_global標識符。定義全局變量時,不能使用var語句。例如,定義一個全局變量timer,代碼如下:
_global.timer=120;
如果在場景時間軸中定義了全局變量timer,則以后可以在文檔中任意的影片剪輯或按鈕時間軸中使用timer,它們引用的都是同一個timer變量。
提示:局部變量和時間軸變量可以使用var語句,嚴格指定數(shù)據(jù)類型;全局變量不能使用var語句,因此不能嚴格指定數(shù)據(jù)類型。
4)變量沖突
假如在某個函數(shù)中定義了一個局部變量,當該局部變量與全局變量或時間軸變量同名時,到底是哪一個變量的值會被引用呢?在Flash中,對于同名而作用域不同的變量而言,采用的都是“就近”原則。
例如,定義一個名為Gvar的全局變量,在場景的時間軸上又定義了一個同名的時間軸變量,在時間軸上的某個函數(shù)中還定義了一個同名的局部變量,當在該函數(shù)中引用Gvar時,引用的是局部變量;而當在場景時間軸中引用Gvar時,引用的是時間軸變量;當在其它時間軸中引用Gvar時,引用的是全局變量。如果要在時間軸中引用與時間軸變量同名的全局變量Gvar時,只要在該變量的前面添加?_global即可,引用方式為?_global.Gvar;如果在場景時間軸上的函數(shù)中引用與局部變量同名的時間軸變量,需要在變量名前添加目標路徑,引用方式為?_root.Gvar;如果在B時間軸上引用A時間軸上的與全局變量同名的時間軸變量,需要在變量名前添加該變量所在的時間軸的目標路徑。8.4.4表達式與運算符
表達式與運算符是在程序開發(fā)中經(jīng)常用到的術語。
1.表達式
表達式是由運算符和操作數(shù)組成的式子,其目的是用來說明一個計算的過程。表達式是Flash可以計算并返回值的任何語句,它是程序中常見的組成單位。執(zhí)行運算的元素被稱為操作數(shù),操作數(shù)最常見的形式是常量、變量或函數(shù)。根據(jù)表達式的計算結果,表達式分為邏輯表達式、字符串表達式和數(shù)值表達式三種類型。
1)邏輯表達式
邏輯表達式就是布爾變量或者常量通過與、或、非操作連接起來的表達式,其計算結果為布爾值(true或false),也稱為邏輯值。例如:
if(sab&&test){
stop();
}
在這里,sab&&test是一個邏輯表達式,表示變量sab和test做邏輯與(&&)運算。一般來說,邏輯表達式出現(xiàn)在條件判斷語句中,用來控制程序的執(zhí)行順序。表達式還可以作為一個成員再與其它的邏輯表達式或者變量組成更加復雜的邏輯表達式。例如:
if((sab&&test)&&(name=="DOG")){
play();
}
在這里,由兩組小的邏輯表達式再組成一個更大的表達式,從而完成更加復雜的功能。
2)字符串表達式
字符串表達式就是一組字符串使用連接運算符(+)連接的表達式。例如:
"mynameis"+"rose"
連接運算得到字符串“mynameisrose”。
3)數(shù)值表達式
數(shù)值表達式就是數(shù)值、變量或函數(shù)通過數(shù)值操作符連接起來的式子。例如:
(n+1)*sqrt(x)
2.運算符
運算符是指組合、比較或修改表達式值的字符,運算符指明對操作數(shù)所進行的運算。根據(jù)運算符的功能來劃分,運算符包括算術運算符、比較運算符、字符串運算符、邏輯運算符、賦值運算符和位運算符。表達式根據(jù)某些約定、求值次序、運算符的優(yōu)先級和結合律規(guī)則來進行計算。
1)運算符的優(yōu)先級和結合律
當在同一語句中使用兩個或多個運算符時,一些運算符會優(yōu)先于其它的運算符。動作腳本按照一個精確的層次來確定首先執(zhí)行哪些運算符。例如,乘法總是先于加法執(zhí)行,括號中的項目優(yōu)先于乘法執(zhí)行。如果沒有括號,動作腳本會按運算符的優(yōu)先級來確定運算次序。例如:
total=2+4*3;
首先做優(yōu)先級別高的乘法運算,再做加法運算,結果為14。
如果在加法運算中使用了括號,動作腳本會首先執(zhí)行加法運算。例如:
total=(2+4)*3;
結果為18。當兩個或更多個運算符優(yōu)先級相同時,它們的結合律會確定它們的執(zhí)行順序。結合律可以是從左到右或者從右到左。例如,乘法運算符具有從左到右的結合律,因此,下面兩個語句是等效的:
total=2*3*4;
total=(2*3)*4;
說明:運算符的優(yōu)先級及結合律可查閱Flash的幫助系統(tǒng)。
2)算術運算符
算術運算符可以執(zhí)行加法、減法、乘法、除法和求模等算術運算。表8-1中列出了動作腳本的算術運算符。
3)比較運算符
比較運算符用于比較表達式的值,然后返回一個布爾值(true或false)。比較運算符需要兩個操作數(shù),其構成表達式的形式是:
第一個操作數(shù)運算符第二個操作數(shù)用比較運算符構成的表達式通常在選擇結構或循環(huán)結構程序中用作條件判斷。例如:
if(score>100){
loadMovieNum("winner.swf",5);
}else{
loadMovieNum("loser.swf",5);
}比較運算符不僅可以用于數(shù)字的比較,也可以用于字符串的比較。當把比較運算符用于字符串的比較時,運算符會根據(jù)兩個字符串中左起相對應的字符的ASCII碼值的大小進行比較,并返回結果true或false。如果兩個字符串的第一個字符的ASCII碼值相等,則會繼續(xù)比較第二個字符,以此類推,直到比較出結果。例如:
"abc">"aba"
比較第一個字符和第二個字符都相等,繼續(xù)比較第三個字符,“c”大于“a”,所以結果為true。
4)字符串運算符
當兩個字符串操作數(shù)使用“+”運算符時,F(xiàn)lash會把兩個字符串連接起來成為一個字符串。例如:
"Congratulations,"+"Donna!"
結果是字符串"Congratulations,Donna!"。如果兩個操作數(shù)中有一個是字符串,另一個是數(shù)字,則Flash會把數(shù)字操作數(shù)轉換成字符串,表達式完成的是字符串運算。
5)邏輯運算符
邏輯運算符對布爾值(true和false)進行運算,然后返回一個布爾值。邏輯運算符“與”和“或”使用兩個操作數(shù),而“非”運算使用一個操作數(shù)。表8-3中列出了動作腳本的邏輯運算符。邏輯運算符通常與比較運算符結合使用,作為程序代碼是否被執(zhí)行的條件。例如,在下面的腳本中,如果i>10和?_framesloaded>50兩個表達式都為true,則將執(zhí)行play()動作:
if(i>10&&_framesloaded>50){
play();
}
6)賦值運算符
在動作腳本中,使用賦值運算符來為變量賦值。賦值運算符中最根本的運算符是賦值運算(=),除了賦值運算(=)外,通過將賦值運算(=)與其他的算術、邏輯和位運算符結合使用,可以構成“復合賦值運算”的賦值運算符。表8-4中列出了動作腳本的賦值運算符。在使用賦值運算符時,要注意賦值運算符的左側必須是變量或屬性。例如,下面的代碼是錯誤的:
10++;
對于復合賦值運算符,例如:
i+=10;
等效于:
i=i+10;增量運算符最常見的用法是i++,而不是比較繁瑣的i=i+1。可以在操作數(shù)前面或后面使用增量運算符。在下面的示例中,age首先遞增,然后再與數(shù)字30進行比較:
++age>=30
在下面的示例中,age首先與數(shù)字30進行比較,然后再遞增:
age++>=30
還可以使用賦值運算符給同一表達式中的多個變量賦值。在下面的語句中,a的值會被賦予變量b、c和d:
d=c=b=a;
7)位運算符
位運算符是用得最少的運算符。位運算通常只在利用匯編語言或C/C++語言進行系統(tǒng)軟件中的底層開發(fā)時才會用到,在此不再贅述。8.4.5函數(shù)
1.內置函數(shù)
Flash中定義了大量的內置函數(shù),可用于訪問特定的信息,執(zhí)行特定的任務。所有的內置函數(shù)都是全局函數(shù),它可用于Flash文檔的任意時間軸。要調用這些全局函數(shù),無需使用目標路徑就可以直接使用。例如,stop()就是一個全局函數(shù),用戶可以在任何位置使用該函數(shù)來停止某個時間軸上動畫的播放。
要查看內置的全局函數(shù),可單擊“動作”面板中的“+”按鈕,然后選擇“全局函數(shù)”功能項,按功能分類展開各個子菜單,查看該菜單下的全局函數(shù),如圖8-8所示。每個函數(shù)都有其各自的特性,有的函數(shù)需要接收參數(shù)也有返回值,有的函數(shù)既不接收參數(shù)也不返回值。如果將值當作參數(shù)傳遞給函數(shù),該函數(shù)將對這些值執(zhí)行運算。如果函數(shù)的輸入、輸出和功能都有詳細的注釋,使用該函數(shù)時,用戶不需要確切地了解它的內部工作原理,就可以在任意一個時間軸中調用它,包括加載的SWF文件的時間軸。
若要調用函數(shù),只需使用函數(shù)名稱并傳遞所必需的參數(shù)。例如:
getURL("");
getTimer();圖8-8“動作”面板中的“全局函數(shù)”
2.自定義函數(shù)
自定義函數(shù)和變量一樣,都附加在定義它們的影片剪輯的時間軸上。Flash中自定義函數(shù)的一般形式為:
function函數(shù)名稱(參數(shù)1,參數(shù)2,…,參數(shù)n){
函數(shù)體;
}
函數(shù)體即函數(shù)的程序代碼。
例如,自定義計算圓的面積的函數(shù)areaOfCircle,它帶有參數(shù)radius。
functionareaOfCircle(radius:Number):Number{
returnMath.PI*radius*radius;
}自定義函數(shù)必須調用才有效。調用自定義函數(shù)的一般形式為:
路徑.函數(shù)名稱(參數(shù)1,參數(shù)2,…,參數(shù)n)
函數(shù)就像變量一樣,必須正確使用目標路徑才能調用它們。如果在定義函數(shù)的時間軸上調用areaOfCircle函數(shù),計算圓的面積,并把面積賦值給變量sc:
sc=areaOfCircle(8);與處理變量一樣,可以使用?_global標識符聲明一個全局函數(shù),該函數(shù)無需使用目標路徑即可在所有時間軸中進行調用。若要定義全局函數(shù),需要在函數(shù)名稱前面加上標識符_global,格式如下:
_global.函數(shù)名稱=function(參數(shù)1,參數(shù)2,…,參數(shù)n){
函數(shù)體;
}
說明:如果函數(shù)被重新定義,則新的定義將替換舊的定義。 8.5元件實例的命名和路徑的引用
1.元件實例的命名
Flash中可以命名的元件實例包括影片剪輯實例、按鈕實例、視頻剪輯實例、動態(tài)文本實例和輸入文本實例,它們是相互之間能產(chǎn)生交互的對象。給元件實例命名,是為了便于使用動作腳本來控制這些對象。元件實例的名稱必須遵循標識符的命名規(guī)則。(標識符命名規(guī)則參見8.4.3節(jié)。)
給元件實例命名的方法是:首先選中實例,然后在“屬性”面板中輸入實例名稱即可,如圖8-9所示。圖8-9為元件實例命名
2.路徑的引用
在Flash的主時間軸上,可以放置多個元件實例,其中,影片剪輯實例又有其自身獨立的時間軸,每個影片剪輯又可以有多個元件實例,如此嵌套引用,就會出現(xiàn)層層疊疊的實例。在引用這些實例時,不僅需要知道該實例的名稱,還要指明該實例的路徑。
Flash中的路徑與操作系統(tǒng)中文件的路徑基本相同,也分為絕對路徑和相對路徑。
1)絕對路徑
絕對路徑就是從主時間軸(用別名?_root表示)出發(fā),沿著影片剪輯的嵌套關系一層一層地往下查找,一直延續(xù)到目標對象的路徑,每個影片剪輯實例之間用“.”分隔。
使用絕對路徑,不管在任何位置,都是從?_root出發(fā),找到目標對象。
例如,在主場景時間軸上有一個名為heart的實例,在heart實例中又包含一個影片剪輯實例heart1,在heart1中還包含一個影片剪輯實例heart2,實例間的層次結構關系如圖8-10所示。圖8-10實例的層次關系對heart2使用play()腳本,使用絕對路徑引用的代碼是:
_root.heart.heart1.heart2.play();
對heart使用play()腳本,使用絕對路徑引用的代碼是:
_root.heart.play();
2)相對路徑
相對路徑是從當前位置出發(fā),給出要引用目標對象的路徑。在相對路徑中,使用關鍵字this指示當前層中的當前時間軸;使用別名?_parent指示當前時間軸的父時間軸??梢灾貜褪褂脛e名?_parent,以使影片剪輯層次結構逐層上升。例如,_parent._parent控制影片剪輯在層次結構中上升了兩層。
相對路徑有兩大特性:簡潔性和相對性。以上例為例,如果在heart2影片剪輯實例中,對它本身使用play()腳本,使用相對路徑引用的代碼是:
this.play();
對heart使用play()腳本,因為heart是heart2上一級的上一級(即父級的父級),使用相對路徑引用的代碼是:
_parent._parent.play(); 8.6常用動作腳本
8.6.1時間軸控制函數(shù)
時間軸控制函數(shù)用來控制動畫中時間軸(播放頭)的播放進程,例如play()、stop()等。時間軸控制函數(shù)可以添加在關鍵幀、按鈕和影片剪輯實例上。
◆play()
格式:play()
作用:使停止的動畫在當前位置繼續(xù)播放。
◆stop()
格式:stop()
作用:停止當前播放的動畫?!鬵otoAndPlay()
格式:gotoAndPlay(scene,frame)
作用:跳轉并播放。使動畫跳轉到指定場景指定的幀,并從該幀開始播放;如果缺省場景,將跳轉到當前場景指定的幀。
參數(shù):scene為跳轉的場景的名稱;frame為跳轉的幀的名稱或幀號。
◆gotoAndStop()
格式:gotoAndStop(scene,frame)
作用:跳轉并停止播放。使動畫跳轉到指定場景指定的幀,并從該幀停止播放;如果缺省場景,將跳轉到當前場景指定的幀。
參數(shù):scene為跳轉的場景的名稱;frame為跳轉的幀的名稱或幀號。◆nextFrame()
格式:nextFrame()
作用:跳至下一幀并停止播放。
◆prevFrame()
格式:prevFrame()
作用:跳至前一幀并停止播放。
◆nextScene()
格式:nextScene()
作用:跳至下一場景的第1幀并停止播放?!魀revScene()
格式:prevScene()
作用:跳至前一場景的第1幀并停止播放。
◆stopAllSounds()
格式:stopAllSounds()
作用:在不停止播放動畫的情況下,停止當前正在播放的所有聲音。例如,為聲音控制按鈕添加如下腳本:
on(release){
stopAllSounds();
}
當單擊該按鈕時,將停止播放動畫中的聲音。
案例8-2:綠葉與瓢蟲
案例展示與任務
打開隨書光盤中“第8章/案例2”文件夾下的“8-2.fla”源文件,為文檔添加腳本,使瓢蟲剛開始時是靜止的,單擊play按鈕后,瓢蟲才開始走動,單擊stop按鈕,瓢蟲停止走動,如圖8-11所示,實例最終效果參見隨書光盤中“第8章/案例2/綠葉與瓢蟲.fla”。圖8-11綠葉與瓢蟲制作分析
腳本的使用與動畫的設計結構有關。首先打開“8-2.fla”源文件,在時間軸上可以看到瓢蟲走動的效果直接做在場景中,因此可以在場景時間軸的第1幀上添加腳本stop(),使瓢蟲剛開始時處于靜止狀態(tài);要使用按鈕控制動畫的播放或停止,需要在play按鈕上添加腳本play(),在stop按鈕上添加腳本stop()。如果單擊play按鈕后,動畫的播放過程是這樣的:從第1幀播放到最后一幀,又從最后一幀進入到第1幀,而當播放頭一旦進入第1幀時就會啟動其上的動作stop(),從而使動畫停止。因此需要在場景時間軸的最后一幀上添加腳本gotoAndPlay(2),使其跳過第1幀上的stop(),這樣動畫只有通過點擊stop按鈕才能停止播放。操作步驟
(1)打開“8-2.fla”源文件。
(2)單擊場景時間軸“瓢蟲”圖層上的第1幀,展開“動作”面板,單擊“添加腳本”按鈕,在下拉菜單中選擇【全局函數(shù)】→【時間軸控制】→【stop】命令,添加腳本:
stop();
(3)單擊場景時間軸“瓢蟲”圖層上的最后一幀,即第200幀,選擇【全局函數(shù)】→【時間軸控制】→【gotoAndPlay】命令,添加腳本:
gotoAndPlay(2);
(4)選擇play按鈕,選擇【全局函數(shù)】→【影片剪輯控制】→【on】命令,在按鈕上添加事件處理函數(shù)on(),選擇“release”鼠標事件,然后把光標插入點放在大括號{}之間,添加腳本play()。在播放按鈕上添加腳本:
on(release){
play();
}
(5)選擇stop按鈕,按上一步驟在按鈕上添加事件處理函數(shù)on(release),然后在大括號之間添加腳本stop()。在停止按鈕上添加腳本:
on(release){
stop();
}
(6)測試動畫,使用按鈕控制瓢蟲的走動與停止。
(7)制作完成,保存文件。8.6.2影片剪輯屬性和控制函數(shù)
1.影片剪輯屬性
通過設置影片剪輯實例的屬性,可以改變影片剪輯實例的位置、透明度、大小、縮放等,能讓它們在動畫播放過程中產(chǎn)生動態(tài)變化,從而制作出非常炫目的動畫效果。
影片剪輯屬性非常豐富,多達30多種,表8-5中列出了常用的屬性,其它屬性在此不一一列舉,用戶可以參考ActionScript參考手冊。
2.設置和獲取影片剪輯屬性
1)使用點語法設置和獲取影片剪輯屬性
大多數(shù)影片剪輯實例的屬性可以獲取,也可以設置。使用點語法來設置或獲取影片剪輯的屬性非常方便。案例8-3:更改綠葉屬性
案例展示與任務
打開隨書光盤中“第8章/案例2”文件夾下的“綠葉與瓢蟲.fla”源文件,為文檔添加腳本,更改綠葉背景的大小為80%,透明度為50%,如圖8-12所示,實例最終效果參見隨書光盤中“第8章/案例3/更改綠葉屬性.fla”。圖8-12更改綠葉屬性操作步驟
(1)接案例8-2,選中葉子影片剪輯實例,在“屬性”面板上給該實例命名為“yezi”。
(2)單擊主場景時間軸“瓢蟲”圖層的第1幀,在stop()腳本后面繼續(xù)添加如下腳本:
yezi._xscale=80;
yezi._yscale=80;
yezi._alpha=50;
(3)測試動畫,保存文件。
2)使用with語句設置和獲取影片剪輯屬性
在上面的例子中,設置影片剪輯實例“yezi”的每一個屬性都要輸入一遍“yezi”。Flash提供with語句來簡化這個操作。with語句的格式如下:
with(object){
在對象object上執(zhí)行的程序段
}在這里,object是要引用的影片剪輯實例或對象的名稱,大括號內的程序段是希望在引用對象上執(zhí)行的動作腳本。使用with語句簡化“yezi”屬性設置,代碼如下:
with(this.yezi){
_xscale=80;
_yscale=80;
_alpha=50;
}
3.影片剪輯控制函數(shù)
影片剪輯控制函數(shù)是用來控制影片剪輯的命令語句,在“動作”面板中展開“全局函數(shù)”,選擇“影片剪輯控制”,可以看到Flash內置的影片剪輯控制函數(shù)。影片剪輯控制函數(shù)的使用對象只能是影片剪輯實例。
◆setProperty()
格式:setProperty(target,property,expression)
作用:計算expression表達式的值,并把它賦給影片剪輯實例target的屬性property。
參數(shù):target為要設置屬性的影片剪輯實例路徑和實例名;property為要設置的屬性;expression為屬性值表達式?!鬵etProperty()
格式:getProperty(target,property)
作用:獲取影片剪輯實例target的property屬性值。
參數(shù):target為影片剪輯實例路徑和實例名;property為要獲取的屬性。
◆duplicateMovieClip()
格式:duplicateMovieClip(target,newname,depth)
作用:復制影片剪輯實例target,新生成的影片剪輯實例newname放到深度為depth的層上。參數(shù):target為影片剪輯實例路徑和實例名;newname為復制的影片剪輯實例的名稱;depth為復制的影片剪輯實例的深度級別編號。深度級別是所復制的影片剪輯的堆疊順序,這種堆疊順序很像時間軸中圖層的堆疊順序。必須為每個所復制的影片剪輯分配一個唯一的深度級別,否則后來復制的影片剪輯實例將替換以前復制的影片剪輯實例,新復制的影片剪輯實例總是在以前復制的影片剪輯實例的上方?!魊emoveMovieClip()
格式:removeMovieClip(target)
作用:刪除使用duplicateMovieClip命令復制出來的影片剪輯實例target。
參數(shù):target為要刪除的影片剪輯實例路徑和實例名。◆startDrag()
格式:startDrag(target,[lock,left,top,right,bottom])
作用:使用鼠標拖曳影片剪輯實例target。
參數(shù):target為要拖動的影片剪輯實例路徑和實例名。Lock為布爾值,當lock為true時,指定可拖動影片剪輯實例鎖定到鼠標位置中央;當lock為false時,鎖定到用戶首次單擊該影片剪輯的位置上。left、top、right和bottom為指定該影片剪輯的拖曳范圍。
◆stopDrag()
格式:stopDrag()
作用:停止拖曳影片剪輯實例。案例8-4:熱氣球
案例展示與任務
打開隨書光盤中“第8章/案例4”文件夾下的“8-4.fla”源文件,為文檔添加腳本,單擊[+]按鈕復制一個熱氣球,單擊[-]按鈕刪除一個復制出來的熱氣球,要求復制出來的熱氣球其位置和大小是隨機的,如圖8-13所示,實例最終效果參見隨書光盤中“第8章/案例4/熱氣球.fla”。圖8-13熱氣球制作分析
在[+]按鈕上添加腳本duplicateMovieClip(),復制熱氣球,并使用setProperty()設置熱氣球的X、Y坐標和縮放屬性,特別要注意復制的熱氣球一定要放在不同深度級別上;在[-]按鈕上添加腳本removeMovieClip(),刪除先前復制出來的熱氣球。操作步驟
(1)打開“8-4.fla”源文件,為場景中的熱氣球實例命名為“qiu”。
(2)在場景時間軸的第1幀上添加腳本:
//變量i用來給復制的新實例創(chuàng)建不同的后綴名,同時把新實例放在不同i值的深度級別上i=1;
(3)選擇[+]按鈕,添加腳本:
on(press){
//復制出熱氣球的一個新實例,動態(tài)命名為"qiu"+i,并把它放在深度為i的層上
duplicateMovieClip(this.qiu,"qiu"+i,i);
//以舞臺尺寸為參考,使用random()函數(shù)隨機設置新實例的X、Y坐標
setProperty("qiu"+i,_x,random(800)+100);
setProperty("qiu"+i,_y,random(100)+400);
//隨機設置新實例的水平和垂直縮放比例都為t,確保等比例縮放
t=random(50)+50;
setProperty("qiu"+i,_xscale,t);
setProperty("qiu"+i,_yscale,t);
//修改i值,為下一次復制做好準備
i=i+1;
}
(4)選擇[-]按鈕,添加腳本:
on(press){
//以后綴名遞減的方式刪除復制出來的影片剪輯實例
i=i-1;
removeMovieClip("qiu"+i);
}
(5)測試動畫,保存文件。8.6.3網(wǎng)絡/瀏覽器控制函數(shù)
網(wǎng)絡/瀏覽器控制函數(shù)主要用來控制動畫的播放形式以及網(wǎng)絡的鏈接。
◆getURL()
格式:getURL(url,[window,[method]])
作用:getURL()動作有兩個功能,其中一個功能是將指定的URL加載到瀏覽器窗口,另外一個功能是將變量數(shù)據(jù)發(fā)送給指定的URL。參數(shù):url為用來獲取文檔的統(tǒng)一定位資源URL;window為可選項,設置所要訪問鏈接的網(wǎng)頁窗口打開方式。可輸入特定窗口的名稱,或從下面的列表中選擇。
_self:在當前瀏覽器中打開鏈接。
_blank:在新窗口中打開鏈接。
_parent:在當前幀的上一級中打開鏈接。
_top:在當前瀏覽器上方新開一個鏈接。例如在Dreamweaver里設置了一些框架,本影片位于某一框架中,當希望鏈接的URL不替代任何框架而出現(xiàn)在所有框架之上時,就可以選擇此選項。
method規(guī)定參數(shù)的傳輸方式。大多數(shù)情況下,其默認參數(shù)為Don'tSend。如果要將內容提交給服務器的腳本,就要選SendUsingGET或者SendUsingPOST。“GET”表示將參數(shù)列表直接添加到url之后,與之一起提交,一般適用于參數(shù)較少且簡單的情況?!癙OST”表示將參數(shù)列表單獨提交,在速度上會慢一些,但不容易丟失數(shù)據(jù),適用于參數(shù)較多較復雜的情況。
例如,當單擊按鈕時,在新窗口中打開,腳本代碼如下:
getURL("","_blank");
在下面的示例中,使用
getURL()來發(fā)送電子郵件:
getURL("mailto:yanqing@163.com");◆fscommand()
格式:fscommand(command,arguments)
作用:fscommand()瀏覽器控制函數(shù)有兩個方面的用途,它可用來控制Flash播放器的播放方式,還可用來給其他應用程序傳遞信息。
參數(shù):command是可以執(zhí)行的命令;arguments是執(zhí)行command命令所使用的參數(shù)。表8-6中列出了fscommand函數(shù)可以執(zhí)行的命令和參數(shù)。案例8-5:商業(yè)廣告
案例展示與任務
打開隨書光盤中“第8章/案例5”文件夾下的“8-5.fla”源文件,為文檔添加腳本,使動畫全屏播放,然后使用窗口控制按鈕控制播放器窗口。單擊標準按鈕,播放器以標準菜單方式播放;單擊全屏按鈕,播放器全屏播放;單擊退出按鈕,關閉播放器。如圖8-14所示,實例最終效果參見隨書光盤中“第8章/案例5/商業(yè)廣告.fla”。圖8-14商業(yè)廣告
制作分析
本例中使用fscommand()函數(shù)控制播放器的播放方式。在動畫的第1幀上添加fscommand()腳本,使動畫進場時全屏播放;最后一幀上添加gotoAndPlay(2),確保后面播放器窗口由窗口控制按鈕控制。分別在三個按鈕上添加fscommand(),使用不同的命令和參數(shù)控制播放器的播放方式。操作步驟
(1)打開“8-5.fla”源文件。
(2)新建圖層,命名為“腳本”。在“腳本”圖層的第1幀上添加腳本:
fscommand("fullscreen",true);
在最后一幀上添加:
gotoAndPlay(2);
(3)選擇最左邊的標準按鈕,添加腳本:
on(release){
fscommand("fullscreen","false");
}選擇中間的全屏按鈕,添加腳本:
on(release){
fscommand("fullscreen","true");
}
選擇右邊的退出按鈕,添加腳本:
on(release){
fscommand("quit");
}
(4)導出動畫測試播放器的播放效果。
(5)制作完成,保存文件。8.6.4其他動作腳本
◆tellTarget()
格式:tellTarget(target){
在目標對象上要執(zhí)行的動作
}
作用:將大括號內的動作應用于target指定的影片剪輯。
參數(shù):target為影片剪輯實例路徑和實例名。例如,在主場景中有一個影片剪輯實例“ball”,“ball”影片剪輯時間軸的第1幀上有stop()動作,在主場景按鈕上添加如下的腳本代碼:
on(release){
tellTarget(“ball”){
gotoAndPlay(2);
}
}
tellTarget會告知實例“ball”跳轉至第2幀開始播放?!魌race()
格式:trace(expression)
作用:計算表達式的值,并在輸出窗口中顯示其結果。在調試程序時,常用于顯示程序在執(zhí)行過程中產(chǎn)生的中間結果。
參數(shù):expression,要輸出顯示的表達式。
例如,在循環(huán)體中使用trace()語句輸出顯示計數(shù)器i的值,以便于觀察i值的變化情況。程序代碼如下:
while(i<=250){
s=s+i;
i=i+2;
trace(i);
} 8.7程序結構控制
8.7.1選擇結構
在Flash中,選擇結構控制語句有4種,即if、ifelse、ifelseif以及switch。前三種語句實際上是同一概念,也是最常用的選擇結構控制語句,它們的核心都是if。
1)if語句
if語句的語法格式如下:
if(條件){
滿足條件時要執(zhí)行的程序段
}在if語句中有一對小括號和一對大括號,小括號內放置的是條件,大括號內放置的是程序代碼。只有當條件滿足時,大括號內的程序代碼才會被執(zhí)行;否則,當條件不滿足時跳出if語句,執(zhí)行大括號后面的后繼語句。但如果條件滿足時要執(zhí)行某個動作,條件不滿足時也要執(zhí)行相應的動作,可以使用ifelse語句。
2)?ifelse語句
ifelse語句的語法格式如下:
if(條件){
滿足條件時執(zhí)行的程序段
}else{
不滿足條件時執(zhí)行的程序段
}
if語句還可以通過嵌套的方式判斷多個條件,只要在if語句中放置elseif語句即可。
3)?ifelseif語句
ifelseif語句的語法格式如下:
if(條件1){
滿足條件1時執(zhí)行的程序段
}elseif(條件2){
滿足條件2時執(zhí)行的程序段
}例如,要表示這樣的選擇:“如果星期天不下雨,我們就去文化園;如果下雨剛好又有專車去長沙的話,我們就去春天百貨;否則我們只能呆在家里?!边@句話有三種選擇:如果不下雨,就去文化園;如果下雨,又有專車,我們就去春天百貨;如果下雨又沒有專車,我們就只能呆在家里。使用ifelse語句嵌套來表示這句話,代碼如下:
if(星期天不下雨){ 我們去文化園
}elseif(有專車去長沙){ 我們去春天百貨
}else{ 我們呆在家里
}8.7.2循環(huán)結構
if語句是在滿足條件時,執(zhí)行一次大括號內的動作。如果有些動作需要反復執(zhí)行,就需要使用循環(huán)控制語句。在Flash中,循環(huán)控制語句有4種,即for、forin、while以及dowhile。下面介紹最常用最基本的for語句和while語句。
1)?for語句
for語句的語法格式如下:
for(init;condition;next){
循環(huán)體
}其中,init是循環(huán)前對循環(huán)變量初始化,通常是一個賦值語句。condition是一個結果為布爾值(true或false)的循環(huán)條件表達式,每次循環(huán)前計算該表達式的值,如果值為true,則執(zhí)行大括號內要重復執(zhí)行的腳本,這些要重復執(zhí)行的腳本也稱為循環(huán)體;如果值為false,就退出循環(huán)。next是每次循環(huán)后要執(zhí)行的語句,通常是遞增或遞減的賦值語句,它用來修改循環(huán)變量的值。例如,計算自然數(shù)1+2+3+…+100的累加和,使用for語句編寫的程序代碼如下:
//變量s用來存儲累加和,循環(huán)前給s清零
s=0;
//變量i用來存儲累加數(shù)。i從1開始做加法,即初始化i=1;累加數(shù)i一直要加到100,所以循環(huán)//條件是i<=100;每次相加后累加數(shù)要增1,即i++
for(i=1;i<=100;i++){
s=s+i;
}圖8-15程序流程圖根據(jù)流程圖可以得出for語句循環(huán)結構的執(zhí)行過程是:
(1)首先對循環(huán)變量初始化。在本例中的循環(huán)條件是i<=100,對循環(huán)變量i進行初始化,即i=1。
(2)對循環(huán)條件進行判斷。循環(huán)條件是i<=100,此時的i=1,滿足循環(huán)條件,執(zhí)行循環(huán)體s=s+i。執(zhí)行完循環(huán)體后,修改循環(huán)變量i的值,即i++。
(3)再返回循環(huán)條件進行判斷。這時i=2,滿足循環(huán)條件,繼續(xù)執(zhí)行循環(huán)體,然后修改循環(huán)變量的值。
(4)如此反復,直到i大于100,不再滿足循環(huán)條件,則退出循環(huán),執(zhí)行for語句的后繼語句。
2)?while語句
while語句的語法格式如下:
while(condition){
循環(huán)體
}當程序遇到while語句時,首先對condition循環(huán)條件表達式求值,如果值為true,就執(zhí)行大括號內的循環(huán)體,循環(huán)體執(zhí)行完后,返回去再次檢測condition的求值結果;如果結果為true,就會不斷地重復執(zhí)行循環(huán)體,直到condition的求值結果為false時,才退出循環(huán),執(zhí)行while語句的后繼語句。使用while語句來改寫上面的例子,程序代碼如下:
s=0;
i=1;
while(i<=100){
s=s+i;
i++;
}在while語句中,特別要注意的是,循環(huán)變量初始化要放在while語句之前,循環(huán)體中一定要有修改循環(huán)變量的表達式,就是要創(chuàng)造出最終能使condition求值結果為false的條件,確保程序能退出循環(huán)。
案例8-6:愛心殘影
案例展示與任務
打開隨書光盤中“第8章/案例6”文件夾下的“8-6.fla”源文件,為文檔添加腳本,制作愛心殘影效果,如圖8
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 玩具風險評估與預警機制-洞察分析
- 語言多樣性研究-洞察分析
- 2024年度離婚協(xié)議中子女財產(chǎn)權益保護范本3篇
- 2024年度教育機構圖書贈與合作協(xié)議3篇
- 線上線下融合的應急響應機制-洞察分析
- 2024年大學生實習就業(yè)合同參考樣本14篇
- 移動端新聞競爭格局-洞察分析
- 氧療在呼吸疾病患者心理干預中的應用-洞察分析
- 無人機電力巡檢系統(tǒng)-洞察分析
- 醫(yī)用器械人體工程學設計優(yōu)化-洞察分析
- 家庭教育與孩子的閱讀習慣培養(yǎng)
- 滬科黔科版《綜合實踐活動》5上農(nóng)業(yè)小當家 活動一《花壇小暖棚》課件
- 期末素養(yǎng)展示試卷-2024-2025學年統(tǒng)編版語文三年級上冊
- 大學試卷(示范)
- 高職院校智能制造實驗室實訓中心建設方案
- 勞動與社會保障法-001-國開機考復習資料
- 青少年足球培訓
- 【MOOC】寄生人體的惡魔-醫(yī)學寄生蟲學-南方醫(yī)科大學 中國大學慕課MOOC答案
- 2024年護理質量分析
- 2025人教版九年級英語全冊知識點清單
- 醫(yī)院緊急情況一鍵報警制度建設
評論
0/150
提交評論