第七章:可以重復(fù)的函數(shù)(function)
不是用幾個例子來示范嗎?怎么還不講例子?是的,下一個例子要用到函數(shù),所以再補(bǔ)充點(diǎn)函數(shù)知識。(上當(dāng)了吧?chocobo也上當(dāng)了,開始翻譯的時候沒想到這篇東西這么長的,這才講完第一個例子呢 55~)
一個函數(shù)是下面這個樣子的: function funcName () { statements }
在ACTION面板里面,function這個單詞是變色的,F(xiàn)LASH認(rèn)識這個單詞,它代表后面的就是描述函數(shù)的內(nèi)容。funcName是函數(shù)的名字,當(dāng)你以后要用這函數(shù)的時候,就要敲這個名字了(是的,建函數(shù)就是為了以后反復(fù)調(diào)用它) ()小括號里面是參數(shù),什么是參數(shù)一會再講 {}大括號里面的就是函數(shù)所要完成功能的一句句代碼。
當(dāng)我們建立函數(shù)之后,函數(shù)并不運(yùn)行,只在你用函數(shù)的名字調(diào)用它出來,才正式開始運(yùn)行。例如我們有這樣一個函數(shù): function sayHi () { trace("Hi!"); } 當(dāng)我們在FLASH某幀需要sayHi的時候,輸入AS: sayHi(); 是不是和最常見的stop();還有play();一樣啊?因?yàn)樗鼈兌际呛瘮?shù)嘛。
sayHi函數(shù)真是弱智,來個有意義的函數(shù)吧。先在場景里放好一個名字叫ball的instance(千萬記得要給instance輸入名字,否則函數(shù)運(yùn)行沒結(jié)果別找我) 在第一幀輸入這樣一個函數(shù): function moveBall () { ball._x += 10; ball._y += 10; } 怕有人不懂,解釋一下,_x代表ball的橫坐標(biāo),ball._x +=10 的意思是ball._x = ball._x + 10 ,這樣省略的寫法還有 -= *= /= 等等。
再做一個按鈕,按鈕的AS: on (release) { moveBall(); } 好的,運(yùn)行,從AS你可以看到,每點(diǎn)一下按鈕,執(zhí)行一次函數(shù),而函數(shù)讓小球下斜下移動。(FLASH的坐標(biāo)軸,原點(diǎn)在左上角)
為什么要建立函數(shù)呢,就是想更有效率,現(xiàn)在有這個函數(shù)已經(jīng)不用每移動一下寫一次AS了,但還是不夠,我們需要更有擴(kuò)展性(flexibility)的函數(shù)。 這個函數(shù)只能移動叫ball的MC,只能向固定的方向移動固定的距離,我們需要可以移動任何MC,向任何方向移動任何距離的函數(shù),這樣可以省卻很多輸入AS的工夫(這就叫一勞永逸,呵呵)
我們的新函數(shù)有三個地方是每次調(diào)用都不一樣的 1、移動的那個MC的名字 2、水平移動的距離 3、垂直移動的距離(呵呵,用極坐標(biāo),也可以把2、3說成移動的距離,和移動的角度,不過大家都不習(xí)慣極坐標(biāo))
為了告訴函數(shù)這些變化的地方,我們需要參數(shù)(parameters),參數(shù)在定義函數(shù)的時候就要輸入,我們的函數(shù)改寫好了: function moveClip (theClip, xDist, yDist) { theClip._x += xDist; theClip._y += yDist; } 當(dāng)我們要實(shí)現(xiàn)原來函數(shù)功能的時候,現(xiàn)在調(diào)用新函數(shù)就變成 moveClip (ball, 10, 10);
定義函數(shù)的時候function moveClip (theClip, xDist, yDist) { 這里的theClip等參數(shù)(parameters)只是定義,本質(zhì)上說是不存在的,因?yàn)闆]有內(nèi)容嘛 當(dāng)我們用moveClip (ball, 10, 10);調(diào)用的時候,ball就輸入到theClip中去了,這里的ball稱為arguments(偶讀得書少,不會翻譯) arguments可以是一個變量,也可以是一個表達(dá)式(例如"a"+"b",先得出結(jié)果再傳輸給函數(shù))只要用逗號隔開各個參數(shù)就行
函數(shù)如何結(jié)束呢
正常來說,函數(shù)運(yùn)行完 {}里所有語句結(jié)束,我們也可以用一句AS:return; 讓它中途結(jié)束,例如: function say(msg) { return; trace(msg); } 這個函數(shù)被調(diào)用的時候?qū)⑹裁炊疾蛔鼍徒Y(jié)束
return還有更重要的用途: function sqr(x) { // Squares a number 平方 return x * x; } a=sqr(2); //a將會被賦予2的平方 4 return更重要的用途就是返回?cái)?shù)據(jù)
在AS里面,有個內(nèi)建的函數(shù)Math.sqrt(就是說你敲入的時候會變色),其功能和我們剛才做的sqr函數(shù)是一樣的,現(xiàn)在你該知道內(nèi)建函數(shù)也沒什么神秘的,我們一樣可以做出相同功能的來。
出處:藍(lán)色理想
責(zé)任編輯:qhwa
上一頁 再來補(bǔ)充一點(diǎn)AS知識 下一頁 第二個版本選擇題的制作
◎進(jìn)入論壇Flash專欄版塊參加討論
|