




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Flahs as入門教程郴州師范雷勇第一章AS的基本常識(shí)FLASH中 actionscript(簡(jiǎn)稱AS是非常重要的組成部分。首先了解如何在FLASH輸入程序通常我們按F9可以調(diào)出動(dòng)作面板?;蛘咴?FLASH菜單Win dow里面Actio ns可打開ACTION面板,ACTION面板分右面的腳本窗,和左面的工具窗腳本窗就是放腳本的地方,而工具窗用于快速地輸入各種ACTION運(yùn)算符,函數(shù),屬性,對(duì)象建議大家使用專家模式,在 FLASH菜單的Edit的Prefere nces的Actio ns pan el 里面選Expert Mode,以后每次打開 ACTION面板都會(huì)自動(dòng)設(shè)置為專家模式(專家
2、模式可直接輸入代碼,初學(xué)者學(xué)下去就會(huì)知道,很多代碼無(wú)法在普通模式里輸入)AS的一些概念所有代碼都需存于某個(gè)地方,可以是 frame (幀),button (按鈕),or movie clip(電影夾子)。只要你選擇了某按鈕或 MC你之后輸入的代碼就存放在它的上面了,注意此時(shí)ACTION面板上方提示為 Object Actio ns。同理你也可以將代碼存放于幀,不過(guò)此時(shí)提示為Frame Actions。當(dāng)你在專家模式的時(shí)候仍無(wú)法輸入代碼,你首先要檢查你是否選擇了frame, button,或MC來(lái)存放代碼。首先我們要了解AS要寫在什么地方,什么時(shí)候 AS會(huì)被觸發(fā)執(zhí)行。1、幀:寫在關(guān)鍵幀上面的AS
3、當(dāng)時(shí)間軸上的指針走到這個(gè)關(guān)鍵幀的時(shí)候,就寫在這個(gè)幀上面的AS就被觸發(fā)執(zhí)行了。常見的例子有在影片結(jié)尾的幀寫上stop()等。操作方法就是點(diǎn)選關(guān)鍵幀,然后打開AS面板,寫下” stop() ”。2、按鈕:不同于幀上面的AS按鈕上面的AS是要有觸發(fā)條件的做一個(gè)按鈕,放到主場(chǎng)景,點(diǎn)選按鈕,然后打開AS面板。現(xiàn)在如果也在按鈕上寫stop(); 那么,輸出的時(shí)候就會(huì)提示錯(cuò)誤。正確的應(yīng)該這樣寫on (release) stop();這里要比幀的動(dòng)畫多這些代碼:on(release)。,整個(gè)代碼翻譯過(guò)來(lái)就是:當(dāng)(松開)停止()里的代碼表示鼠標(biāo)的觸發(fā)事件事件之一,這里用的是release松開,按鈕的常用事件:r
4、elease 松開releaseOutside在按鈕外面松開鼠標(biāo)離開按鈕的感應(yīng)區(qū)press按下rollOver鼠標(biāo)進(jìn)入按鈕的感應(yīng)區(qū)rollOut現(xiàn)在很明確了 :寫在按鈕上面的AS一定就是這種格式的:on(事件)要執(zhí)行的代碼3、MC(電影剪輯)-MovieClip的簡(jiǎn)稱MC然后打開AS面板。看個(gè)例子如果你看懂了上面的內(nèi)容,那么寫在MC上面的AS和寫在按鈕上的大同小異。操作方法就是點(diǎn)選()里的代碼同樣表示一個(gè)事件。MC的事件有下面這些:load載入,當(dāng)MC出現(xiàn)的時(shí)候執(zhí)行。也就是除非卸載這個(gè)MC否則load事件內(nèi)的代碼只執(zhí)行一次unload卸載,當(dāng)MC卸載的時(shí)候執(zhí)行enterFrame存在的每個(gè)幀。
5、在 MC存在的每個(gè)幀都要執(zhí)行一次代碼。只要這個(gè)MC存在于場(chǎng)景,代碼就反復(fù)執(zhí)行。通??捎糜谘h(huán)。舉例:如果你在場(chǎng)景中放置一個(gè)小球MC那么在球上寫代碼on ClipEve nt (en terFrame) this._x += 5; 球就能不斷向右移動(dòng)。mouseDown按下鼠標(biāo),在場(chǎng)景內(nèi)任何地方都算。和按鈕不一樣的地方 mouseMove移動(dòng)鼠標(biāo),只要移動(dòng)鼠標(biāo)就執(zhí)行代碼mouseUp松開鼠標(biāo)同樣你要明確:寫在MC的代碼一定總是這種格式:onClipEvent(事件)代碼看到這里,如果你明白的寫在幀、按鈕、MC上的代碼有什么不一樣,任務(wù)就算完成了第二章AS對(duì)象篇學(xué)會(huì)用絕對(duì)路徑和相對(duì)路徑表達(dá)對(duì)象雖然
6、AS不是真正的面向?qū)ο蟮木幊?,但是它也有?duì)象的概念。這個(gè)概念貫穿整個(gè)AS的始終,所以,對(duì)對(duì)象的理解,比對(duì)語(yǔ)法或者其他的理解更為重要現(xiàn)在開始吧:首先,我們來(lái)了解一下路徑,路徑分兩種:絕對(duì)路徑和相對(duì)路徑。做過(guò)html的朋友應(yīng)該知道這個(gè)概念。但這里還是要詳細(xì)解釋一下,對(duì)路徑的理解要深入。在講路徑之前,有必要先講一下.語(yǔ)法:舉例說(shuō)明,這里要表示房間里的桌子上的一本書,用.語(yǔ)法這么表示:房間.桌子.書如果要再細(xì)到書上的頁(yè)上面的字,很顯然是: 房間.桌子.書.頁(yè)面.字看明白了吧?我也不懂得怎么說(shuō),.語(yǔ)法就是這樣表示對(duì)象的,點(diǎn)的前面是其后面的父級(jí)。如房間是桌子的父級(jí),桌子的子級(jí)就是書。還是不明白?這樣吧,你
7、把.里寫成“里面的”就可以了,這樣就是:房間(里面的)桌子(里面的)書(里面的)頁(yè)面(里面的)字?,F(xiàn)在開始說(shuō)路徑了,其中也要夾雜的對(duì)象的說(shuō)明,看:從例子入手。創(chuàng)建一個(gè)MovieClip,MC命名為“ MC ,放在主場(chǎng)景里面,然后再做一個(gè)按鈕,放在“ MC里面,分別給MC實(shí)例和按鈕實(shí)例命名(Instance Name 注意是實(shí)例名不是 MC的名字):MC-myMC button-myBtn現(xiàn)在我們假設(shè)主場(chǎng)景(AS中表示為_root )是房子,MC是桌子,按鈕是書,那么分別怎么表達(dá)房子,桌子,書呢?如下圖:_root房子_root.myMc房子.桌子_root.myMc.myBtn房子.桌子.書這
8、里的_root是Flash的關(guān)鍵字,表示主場(chǎng)景的 Timeline(時(shí)間線)。這里的 房子,桌子,書都是我們要理解的“對(duì)象”。找到這個(gè)對(duì)象后,才能對(duì)對(duì)象進(jìn)行操作,施加方法。如:我現(xiàn)在要打掃房子,打掃是方法,但對(duì)象是房子,表達(dá)式是這樣:房子.打掃()如果你不能正確的表達(dá)房子這個(gè)對(duì)象,你的打掃也就不能正確的實(shí)施了。*說(shuō)明:這里為什么要在打掃后面加()呢?因?yàn)榇驋呤欠椒ú皇菍?duì)象,為了讓 Flash知道這是個(gè)方法,我們必須加上(),要不然它會(huì)以為房子里面有“打 掃”這個(gè)東西。現(xiàn)在,我們可以很容易的對(duì)房間里面的各個(gè)東西進(jìn)行操作,如房子.打掃();房子.木桌子.整理();房子.玻璃桌子.打碎();房子.書
9、桌.書.看();等等,相信你把它們翻譯成AS代碼沒(méi)什么問(wèn)題吧比如要主場(chǎng)景停止播放,就是_root.stop();要MC停止播放,就是_root.myMc.stop();以上的寫法是絕對(duì)路徑?,F(xiàn)在說(shuō)說(shuō)相對(duì)路徑。還是上面的例子。假如給你下了一個(gè)命令:修理房子里面的紅色的椅子。那么怎么表達(dá)呢?就是:房子.紅色椅子.修理()但是如果命令式寫在 紅色椅子上,那么命令可以寫成:這張椅子.修理();這就是相對(duì)路徑。換過(guò)來(lái)用Flash實(shí)例說(shuō)明?,F(xiàn)在我想讓主場(chǎng)景下的一個(gè)帶動(dòng)畫的電影剪輯myMC在一開始就不要播放,而是先停止。那么你有什么辦法呢?辦法之一可能就是使用絕對(duì)路徑,在主場(chǎng)景放入這個(gè)MC的那個(gè)幀寫上:_r
10、oot.myMc.stop();這個(gè)是對(duì)的。但是一旦 myMc的名字一變,你就得跟著改這句話了。有沒(méi)有辦法不管這個(gè)“ MC的實(shí)例名不管怎么改,都會(huì)被我們同樣一句的AS找到?當(dāng)然可以,就是把 AS寫在這個(gè)MCI。選中Me,在AS面板上寫onClipEvent (enterFrame)這里的this也是Flash的關(guān)鍵字,這個(gè)this 就是指這個(gè)MC本身. this.stop(); 現(xiàn)在不管你這個(gè) MC放在哪里,命名是什么,反正肯定會(huì)停下來(lái)。為什么,因?yàn)锳S在MC。 如果你在這里寫上_root.stop();那就錯(cuò)了。為什么?仔細(xì)想想。另外的一個(gè)關(guān)鍵字就是_parent 。如果你理解了 this
11、,那么_parent并不難理解。舉例: 還是哪個(gè)假設(shè) 房子(_root), 桌子,書他們的關(guān)系是:房子.桌子.書選中桌子,在桌子上寫代碼:寫onClipEvent(enterFrame) _parent.打掃();意思就是打掃房間;選中書,在書上寫代碼:寫onClipEvent(enterFrame)_parent.打掃();意思就是打掃桌子。_pare nt也就是父級(jí)。桌子的_pare nt就是房子的timeli ne( 時(shí)間線),書的pare nt也就是桌子。點(diǎn)的后面對(duì)象的 _pare nt就是點(diǎn)前面的對(duì)象。第三章AS語(yǔ)法篇首先要強(qiáng)調(diào)的是:AS語(yǔ)法的大小寫是敏感的。如:gotoAndPla
12、y()正確 gotoAndplay()錯(cuò)誤。關(guān)鍵字的拼寫必須和語(yǔ)法一致,要做到很容易,因?yàn)樵贔lash的AS面板里面,關(guān)鍵字會(huì)有不一樣的顏色顯示。這里說(shuō)一下,我們要從開始就養(yǎng)成編程的好習(xí)慣,如在每個(gè)語(yǔ)句后面都加上分號(hào),有可能的話,盡量給復(fù)雜的語(yǔ)句加上注釋。注釋的例子/這個(gè)是注釋,但是只能有一行/*這個(gè)也是注釋,可以寫很多行 */接下來(lái),介紹幾個(gè)類型的語(yǔ)法。1、幾個(gè)常用的控制場(chǎng)景的方法,如play(); /讓時(shí)間軸的指針播放stop(); /停止時(shí)間軸的指針在程序觸發(fā)時(shí)候的那個(gè)幀gotoAndPlay(); /讓指針跳轉(zhuǎn)到某個(gè)幀,然后繼續(xù)播放gotoA ndStop(); /讓指針跳轉(zhuǎn)到某個(gè)幀,
13、停止在那個(gè)幀n extFrame(); / 往下走一幀prevFrame(); /往前走一幀這些都是方法。方法?解:打個(gè)比方,我們管吃飯叫作一種方法,用來(lái)解決肚子餓這個(gè)問(wèn)題。我們管stop()叫做一種方法,用來(lái)解決時(shí)間軸指針停下來(lái)的問(wèn)題。我們管上面的幾個(gè)東西叫方法,用來(lái)解決時(shí)間軸指針運(yùn)動(dòng)的問(wèn)題。2、控制屬性的語(yǔ)法有很多,我列幾個(gè)_x, _y, _alpha ,_width ,_name . 等等屬性,這些都是屬性屬性?解:打個(gè)比方。我們管你的身高叫做屬性,用來(lái)標(biāo)識(shí)你的高度。我們管你的體重叫屬性,用來(lái)標(biāo)識(shí)你的質(zhì)量。我們管_x叫屬性,用來(lái)標(biāo)識(shí)目標(biāo)的X軸坐標(biāo)。我們管_alpha叫屬性,用來(lái)標(biāo)識(shí)目標(biāo)的
14、透明度 3、其他方法和自己定義的方法。除了系統(tǒng)自帶的一些方法外,也可以自定義一些方法,用Function定義。回顧一下,今次要大家記住的東西:AS語(yǔ)法的大小寫是敏感的、方法的概念、屬性的概念。第四章:怎樣寫AS程序要牢記的是,學(xué)習(xí)編程是一個(gè)過(guò)程(process )而不是一個(gè)事件(eve nt )。如果你第一次學(xué)習(xí)到的時(shí)候不能照著完成也不必?fù)?dān)心。關(guān)于計(jì)算機(jī)語(yǔ)言:編程語(yǔ)言是用來(lái)發(fā)指令給電腦,由電腦接受信息并執(zhí)行命令編程語(yǔ)言也有詞匯表和文法,如人類的語(yǔ)言類似通過(guò)編程語(yǔ)言我們可以告訴電腦去做什么,也可以從他那獲得信息關(guān)于語(yǔ)法和邏輯:學(xué)習(xí)編程的思想比學(xué)習(xí)一種語(yǔ)言的語(yǔ)法重要假設(shè)FLASH是懂我們語(yǔ)言的單詞
15、的,我們對(duì)FLASH說(shuō):“ Flash,讓一個(gè)球在屏幕里面彈來(lái)彈去吧”FLASH會(huì)什么都做不了, FLASH要我們用他的世界懂的東西,例如: movie clips, butto ns, frames,來(lái)描述它要做的事那我們?cè)僬f(shuō)一次:“ Flash,讓一個(gè)名字叫 ball_one的movie clip 在屏幕里面彈來(lái)彈去吧”我們已經(jīng)用MC這個(gè)FLASH董的東西來(lái)描述了,但 FLASH還是什么都不做,因?yàn)樗枰嗟男畔ⅲ?這個(gè)球有多大*它放在哪里?*一開始它首先往哪個(gè)方向運(yùn)動(dòng)?*它初始的速度是多少*它在哪里彈來(lái)彈去呢?*彈來(lái)彈去要持續(xù)多久呢?看來(lái)我們需要有邏輯結(jié)構(gòu)地告訴 FLASH它應(yīng)該怎么去
16、做1、一個(gè)球指的是一個(gè)叫 ball_one的圓形MC直徑50像素2、 彈來(lái)彈去的地方就是場(chǎng)景,邊550像素,咼400像素。3、將ball_one放在場(chǎng)景某處4、 以一個(gè)隨機(jī)的角度,75像素每秒的速度開始移動(dòng) ball_o ne5、如果ball_one接觸到場(chǎng)景的某邊,就彈回6、一直不停地運(yùn)動(dòng)下去,直到我們讓它停如果FLASH真的懂我們語(yǔ)言的單詞,他應(yīng)該知道如何開始做了總結(jié)一下關(guān)鍵點(diǎn):無(wú)論是使用什么語(yǔ)言,編程思想的藝術(shù)都在于用如何將邏輯步驟列出在你開始將要做的事用計(jì)算機(jī)語(yǔ)言描述之前,用我們?nèi)祟惖恼Z(yǔ)言描述一次會(huì)很有幫助即使你將他們翻譯成任何的計(jì)算機(jī)語(yǔ)言,他們的邏輯步驟應(yīng)該是一樣的電腦不懂用假設(shè)完成
17、去你的想法,他們沒(méi)有思考能力然后我們象學(xué)所有語(yǔ)言一樣吧,來(lái)個(gè)HELLO WORL吧在ACTION面板輸入var message = HELLO WORLD;trace (message);然后我們按CTRL和ENTERS,看到結(jié)果了嗎?第一行代碼:var message = HELLO WORLD;告訴FLASH記住一個(gè)名字叫 message的容器(通常在計(jì)算機(jī)里稱為變量 (variable),在FLASH里面,變量可以裝文字,和可以裝數(shù)字)里面裝了這樣的 數(shù)據(jù)(datum),內(nèi)容為:HELLO WORLD“=”等號(hào)是一個(gè)常用的運(yùn)算符號(hào)(operato,在FLASK面它不是代表相等,而是代表賦
18、值var命令的含義是宣布給整個(gè)電影,此變量的內(nèi)容是什么。第二行代碼:trace (message);就是要FLASH顯示message里面的內(nèi)容,為什么FLASH能輸出內(nèi)容呢,因?yàn)楫?dāng)你按CTRL+ENTE又或者在網(wǎng)上打開這個(gè)電影的時(shí)候,你輸入的每一段ActionScrpit代碼,都會(huì)通過(guò)FLASH的解釋器(interpreter)來(lái)解讀然后執(zhí)行如果解釋器能解釋你的代碼,他會(huì)運(yùn)行它,并返回你要返回的結(jié)果,如果解釋器看不懂你的代碼,他也會(huì)返回錯(cuò)誤代碼一一告訴你錯(cuò)誤的原因通常,我們發(fā)給解釋器的命令不只命令這么簡(jiǎn)單,還包括命令的內(nèi)容例如trace (message);這個(gè)trace輸出命令的內(nèi)容就是
19、message計(jì)算機(jī)里就稱為參數(shù)(argument或parameter),如果一個(gè)命令支持多個(gè)參數(shù),參數(shù)之間一般用“,來(lái)分割,如:setProperty(目標(biāo),屬性,值);1. 表達(dá)式(expression) : (2 + 3) * (4 / 2.5) - 1可稱為一個(gè)表達(dá)式,a+b也是表達(dá)式,需要解釋器運(yùn)算才得到結(jié)果的值。2. 條件(conditionals):if( 天氣=下雨) trace(還是帶把雨傘吧)如一個(gè)例子就是美女上街,會(huì)先看看外面會(huì)否下雨,下雨就帶上雨傘。這就叫條件判斷啦3. 循環(huán)(loop):如果要輸出5個(gè)數(shù)字,你是寫5遍trace命令嗎?更多的就不行了吧,你可以用whil
20、e和for命令來(lái)完成重復(fù)的動(dòng)作if (條件)/條件滿足執(zhí)行這里的代碼elsefor(i=O;iCopy Frames再選擇question 2 的第十幀,EditPaste Frames 將第一題復(fù)制過(guò)來(lái)了當(dāng)然問(wèn)題要改成When wasMP3audio support added to Flash?(什么時(shí)候 FLASH開始支持MP3格式導(dǎo)入?),答案也要改成Version 3, Version 4,Vers ion 5數(shù)據(jù)初試化雖然是個(gè)很簡(jiǎn)單的FLASH但是象其他復(fù)雜的FLASH-樣,先告訴FLASH要用到的數(shù)據(jù),例如題目的答案等,這是個(gè)好習(xí)慣,越復(fù)雜的FLASH受惠越多正常來(lái)說(shuō)定義數(shù)據(jù)應(yīng)該
21、 LOADING吉束之后的。為了把題目定在第一題,ACTIONS需要 一句stop();選擇第一幀,在ACTION面板里面輸入代碼/初始化變量var q1a nswer; / users an swer for questio n 1第一題用戶的答案var q2a nswer; / users an swer for questio n 2第二題用戶的答案var totalCorrect = 0; / counts n umber of correct an swers答對(duì)的題數(shù)var displayTotal; / text field for display ing users score
22、顯示用戶分?jǐn)?shù)的變量/ stop the movie at the first questio nstop();你會(huì)發(fā)現(xiàn)/開頭的那一行代碼都變了色,/代表的是注釋,是用來(lái)輔助閱讀代碼用的,對(duì)代碼執(zhí)行沒(méi)有影響(是的,你在里面寫笑話,寫小說(shuō)都可以, 不會(huì)影響你的FLASH的a-a)我們定義了四個(gè)將要用到的變量,用途已經(jīng)在注釋里面寫了,寫注釋也是一個(gè)好習(xí)慣關(guān)于命名變量名變量起名displayTotal ,意思是display total,因變量名不能使用空格和破折號(hào),所以用第二個(gè)單詞的開始字母大寫,以此分隔單詞一些程序員也喜歡用下劃線:display_total記住一定要給你的變量起一個(gè)一眼就能識(shí)別意
23、義的名字添加label我們知道第二題是在第10幀的,我們只需要一句AS gotoAndStop(10);就可以執(zhí)行第二個(gè)問(wèn)題了不過(guò)MOOC告訴你這不是好習(xí)慣,因?yàn)閯?dòng)畫的內(nèi)容是不斷改變的,所以我們應(yīng)當(dāng)習(xí)慣使用label,即使幀數(shù)如何變化,只要label指向正確,不需要修改ACTION都可以繼續(xù)運(yùn)行(chocobo再提醒你吧,不要使用相同的label,即使在不同是Scene當(dāng)中)好了,我們?cè)趌abel層的第1、10、20分別F6創(chuàng)建關(guān)鍵幀,給他們寫上in it、q2、quizE nd要給按鈕寫上代碼了在三個(gè)按鈕里面分別寫入代碼,大同小異的:按鈕一:on (release) q1a nswer =
24、1;gotoA ndStop (q2);按鈕二:on (release) q1a nswer = 2;gotoA ndStop (q2);按鈕三on (release) q1a nswer = 3;gotoA ndStop (q2);這三段代碼用人類的語(yǔ)言描述,就是:當(dāng)用戶點(diǎn)擊某個(gè)按鈕選擇答案后,把他選擇的答案記錄到q1answer變量中去,然后進(jìn)入下一題。on這個(gè)單詞代表隨后的就是一個(gè)要觸發(fā)的事件release是指在按鈕上松開鼠標(biāo)這樣一個(gè)事件當(dāng)動(dòng)畫執(zhí)行到這里的時(shí)候,三個(gè)按鈕都會(huì)分別監(jiān)聽用戶有沒(méi)有做在按鈕上放開鼠標(biāo)這個(gè)動(dòng)作,一旦發(fā)生,按鈕就會(huì)自動(dòng)執(zhí)行大括號(hào)里面的代碼了若用戶選第一個(gè),中是:q1
25、answer = 1; / 用q1answer變量記住用戶選擇的是第一個(gè)答案gotoA ndStop (q2); /進(jìn)入下一題上面我用了注釋的方法來(lái)解釋兩句代碼,你必須習(xí)慣,因?yàn)椴皇撬性闯绦蚨加薪坛?,但是好的源程序都?huì)有注釋第二題的按鈕與前面相似,只是變量換為q2answer,選擇完進(jìn)入結(jié)束的畫面,例如第一個(gè),改為:on (release) q2a nswer = 1;gotoA ndStop (quizE nd);結(jié)束的畫面結(jié)束應(yīng)該做什么,當(dāng)然是告訴用戶分?jǐn)?shù)啦,寫在第 20幀,就是label為quizEnd的那幀的代碼:/判斷答案是否正確,正確就加分if (qlanswer = 2)tot
26、alCorrect = totalCorrect + 1;if (q2a nswer = 3)totalCorrect+; totalCorrect+其實(shí)是 totalCorrect = totalCorrect + 1;一個(gè)更簡(jiǎn)潔的寫法,幾乎少打了一半的字母啊。/把得分傳遞給動(dòng)態(tài)文本的變量displayTotaldisplayTotal = totalCorrect;用人的語(yǔ)言描述:如果第一題選3,答對(duì)數(shù)加一,如果第二題選2,答對(duì)數(shù)加一,把答對(duì)題目數(shù)賦予另一變量現(xiàn)在答對(duì)的題數(shù)是放到變量displayTotal中了,怎么顯示?在quiz end第20幀處建關(guān)鍵幀,鍵入Thank you for
27、 taking the quiz! Your score final score is: /2(謝謝回答問(wèn)題,你最后成績(jī)是答對(duì)了/2道題)在/2之前那個(gè)空白的地方放上一個(gè)文本框,菜單TextOptions顯示文本面板,把 Static Text下拉改為Dynamic Text,順便把Border/Bg的鉤去掉,最后在Variable那一欄填上要顯示的變量名displayTotal你是不是和chocobo 一樣不耐煩了?快下載 /webdesign/lect.oockQuizzes.zip;吧,里面的quiz.fla就是本章的內(nèi)容,其他的fla的內(nèi)容也將會(huì)在
28、后面講到第六章再來(lái)補(bǔ)充一點(diǎn)AS知識(shí)數(shù)據(jù)分類是很有必要的,象 8005154556這樣的一個(gè)數(shù)字是沒(méi)有多大意義的,但是如果將他歸類到電話號(hào)碼:800-515-4556,那就有意義了。(這是 WHO的電話???是不是 MOOC的?呵呵)AS里面數(shù)據(jù)的類型相對(duì)其他語(yǔ)言已經(jīng)算少的,有:*字符串String由一系列的characters組成,可以包含字母,數(shù)字和符號(hào),一般用雙引號(hào)”擴(kuò)?。ㄓ涀〔灰獙懥巳堑摹啊保? 數(shù)字 Number*布爾值Boolean用于條件判斷的時(shí)候,只有兩個(gè)值true和false* Null and Undefined這也是數(shù)據(jù)的類型之一,Null代表變量還沒(méi)有內(nèi)容,Undefin
29、ed是連變量都未定義*數(shù)組Array用來(lái)按順序地存放一組數(shù)據(jù)* MovieClip 這也是數(shù)據(jù)的一種嗎?你就當(dāng)它是FLASH特有的一種數(shù)據(jù)吧,裝的就是一個(gè)個(gè)MC INSTANCE解釋一下吧,MCA library 拖到場(chǎng)景中就是一個(gè)獨(dú)立的instance,個(gè)MC可以創(chuàng)立多個(gè)instance ),還有MC里面的其他數(shù)據(jù)* Object可以是FLASH已經(jīng)內(nèi)部定義的,或者是用戶寫程序時(shí)自定義的一類數(shù)據(jù)再分類一下number, stri ng, boolea n, undefin ed, and null,這些屬于簡(jiǎn)單的數(shù)據(jù)類型,特征是只有一個(gè)值array, object, movieclip.就可
30、以包含不止一個(gè)值chocobo:其實(shí)array也應(yīng)該算是object,上面這些概念的東西總是有些沉悶,沒(méi)關(guān)系,留下印象,以后用到了,自然會(huì)回過(guò)來(lái)真正了解一遍的第七章可以重復(fù)的函數(shù)(function)不是用幾個(gè)例子來(lái)示范嗎?怎么還不講例子啊?是的,下一個(gè)例子要用到函數(shù),所以再補(bǔ)充點(diǎn)函數(shù)知識(shí)。(上當(dāng)了吧?chocobo也上當(dāng)了,開始翻譯的時(shí)候沒(méi)想到這篇東西這么長(zhǎng)的,這才講完第一個(gè)例子呢55)一個(gè)函數(shù)是下面這個(gè)樣子的:fun cti on fun cName () stateme nts在ACTION面板里面,function這個(gè)單詞是變色的,F(xiàn)LASH認(rèn)識(shí)這個(gè)單詞,它代表后面的就是描述函數(shù)的內(nèi)容f
31、un cName是函數(shù)的名字,當(dāng)你以后要用這函數(shù)的時(shí)候,就要敲這個(gè)名字了(是的,建函數(shù)就是為了以后反復(fù)調(diào)用它)()小括號(hào)里面是參數(shù),什么是參數(shù)一會(huì)再講大括號(hào)里面的就是函數(shù)所要完成功能的一句句代碼。當(dāng)我們建立函數(shù)之后,函數(shù)并不運(yùn)行,只在你用函數(shù)的名字調(diào)用它出來(lái),才正式開始運(yùn)行例如我們有這樣一個(gè)函數(shù)fun cti on sayHi () trace(Hi!);當(dāng)我們?cè)贔LASH某幀需要sayHi的時(shí)候,輸入ASsayHi();是不是和最常見的stop();還有play(); 一樣啊?因?yàn)樗鼈兌际呛瘮?shù)嘛sayHi函數(shù)真是智,來(lái)個(gè)有意義的函數(shù)吧。先在場(chǎng)景里放好一個(gè)名字叫ball的instanee (千
32、萬(wàn)記得要給instanee輸入名字,否則函數(shù)運(yùn)行沒(méi)結(jié)果別找我)在第一幀輸入這樣一個(gè)函數(shù):fun cti on moveBall () ball._x += 10; /怕有人不懂,解釋一下, _x代表ball的橫坐標(biāo),ball._x +=10的意思是ball._x = ball._x + 10,這樣省略的寫法還有 -=*= /= 等等ball._y += 10;再做一個(gè)按鈕,按鈕的AS:on (release) moveBall();好的,運(yùn)行,從AS你可以看到,每點(diǎn)一下按鈕,執(zhí)行一次函數(shù),而函數(shù)讓小球下斜下移動(dòng)。(FLASH的坐標(biāo)軸,原點(diǎn)在左上角)為什么要建立函數(shù)呢,就是想更有效率,現(xiàn)在有這個(gè)
33、函數(shù)已經(jīng)不用每移動(dòng)一下寫一次AS了,但還是不夠,我們需要更有擴(kuò)展性(flexibility) 的函數(shù)這個(gè)函數(shù)只能移動(dòng)叫ball的MC只能向固定的方向移動(dòng)固定的距離,我們需要可以移動(dòng)任何MC向任何方向移動(dòng)任何距離的函數(shù),這樣可以省卻很多輸入AS的工夫(這就叫一勞永逸,呵呵)我們的新函數(shù)有三個(gè)地方是每次調(diào)用都不一樣的1、移動(dòng)的那個(gè)MC的名字2、水平移動(dòng)的距離3、 垂直移動(dòng)的距離(呵呵,用極坐標(biāo),也可以把2、3說(shuō)成移動(dòng)的距離,和移動(dòng)的角度,不過(guò)大家都不習(xí)慣極坐標(biāo))為了告訴函數(shù)這些變化的地方,我們需要參數(shù)(parameters),參數(shù)在定義函數(shù)的時(shí)候就要輸入,我們的函數(shù)改寫好了:fun ction m
34、oveClip (theClip, xDist, yDist) theClip._x += xDist;theClip._y += yDist;當(dāng)我們要實(shí)現(xiàn)原來(lái)函數(shù)功能的時(shí)候,現(xiàn)在調(diào)用新函數(shù)就變成moveClip (ball, 10, 10);定義函數(shù)的時(shí)候 function moveClip (theClip, xDist, yDist) 這里的theClip等參數(shù)(parameters)只是定義,本質(zhì)上說(shuō)是不存在的,因?yàn)闆](méi)有內(nèi)容嘛當(dāng)我們用moveClip (ball, 10, 10);調(diào)用的時(shí)候,ball就輸入到theClip中去了,這里的ball稱為arguments (偶讀得書少,不會(huì)
35、翻譯)arguments可以是一個(gè)變量,也可以是一個(gè)表達(dá)式(例如 a+b,先得出結(jié)果再傳輸給函數(shù))只要用逗號(hào)隔開各個(gè)參數(shù)就行函數(shù)如何結(jié)束呢正常來(lái)說(shuō),函數(shù)運(yùn)行完里所有語(yǔ)句結(jié)束,我們也可以用一句AS: return;讓它中途結(jié)束,例如:fun cti on say(msg) return;trace(msg);這個(gè)函數(shù)被調(diào)用的時(shí)候?qū)⑹裁炊疾蛔鼍徒Y(jié)束return還有更重要的用途:fun cti on sqr / Squares a n umber平方retur n x * x;a=sqr(2); /a將會(huì)被賦予2的平方4return更重要的用途就是返回?cái)?shù)據(jù)在AS里面,有個(gè)內(nèi)建的函數(shù) Math.sqr
36、t (就是說(shuō)你敲入的時(shí)候會(huì)變色),其功能和我們剛才做的sqr函數(shù)是一樣的,現(xiàn)在你該知道內(nèi)建函數(shù)也沒(méi)什么神秘的,我們一樣可以做出相同功能的來(lái)。第八章 第二個(gè)版本選擇題的制作讀到這你發(fā)現(xiàn)什么,我是發(fā)現(xiàn)了,MOOC不是在教AS,他簡(jiǎn)直是在上編程課。在第一個(gè)版本的制作里你發(fā)現(xiàn)了什么缺點(diǎn)?是的,輸入了很多次AS很麻煩。我們要做的是用函數(shù)來(lái)集中我們的代碼,只有集中了才好修改,越復(fù)雜的程序越是如此(想象一下在很多個(gè)MC之間查代碼,真是頭痛,當(dāng)然是集中一塊好)這個(gè)多選題,我們就歸結(jié)成兩個(gè)函數(shù)吧answer和gradeUser代碼(可以直接看源程序,在上面地址那個(gè)ZIP里面的quiz-version2.fla
37、):大部分的代碼都被集中到第一幀了,千萬(wàn)不要被一大堆代碼嚇著了,代碼這么長(zhǎng),只是為了讓閱讀者看得更清楚而已。(其實(shí)越短的代碼才越可怕呢, 呵呵)/ Stop the movie at the first questionstop ();/ Initialize main timeline variables定義變量var displayTotal; / Textfield for displaying users score var numQuestions = 2; / Number of quiz questions var q1answer; / Users answer for que
38、stion1 var q2answer; / Users answer for question2var totalCorrect = 0; / Number of questions answered correctly以上和例一一樣var correctAnswer1 = 3; / The correct choice for question 1第一題的正確答案var correctAnswer2 = 2; / The correct choice for question 2第二題的正確答案/ Function to register users answers這個(gè)函數(shù)的功能是提交答題
39、者的答案function answer (choice) answer.currentAnswer+;/現(xiàn)在answer.currentAnswer 是1,正在提交的是第一題,下一次answer.currentAnswer 就變成2,代表提交的是第二題set (q + answer.currentAnswer + answer, choice);/ 不復(fù)雜不復(fù)雜,q + answer.currentAnswer + answer第一題的時(shí)候就是 q1answer,第二題是q2answer,把參數(shù)choice傳過(guò)來(lái)的值放到兩個(gè)變量里面而已if (answer.currentAnswer = nu
40、mQuestions) /判斷是不是兩題都答完了,是就轉(zhuǎn)到問(wèn)題結(jié)束幀gotoAndStop (quizEnd); else gotoAndStop (q + (answer.currentAnswer + 1);/ Function to tally users score這個(gè)函數(shù)是改題的function gradeUser() / Count how many questions user answered correctly將兩個(gè)答案和正確答案比較,對(duì)就totalCorrect力口一/此處用了一個(gè)for循環(huán),大家如有疑問(wèn)的,可以查AS字典,在帝國(guó)就有中文版for (i = 1; i = n
41、umQuestions; i+) /下面用的eval有必要說(shuō)一下,它的作用是將字符串和變量組成一個(gè)新的變量名,是個(gè)很方便的功能if (eval(q + i + answer) = eval(correctAnswer + i) totalCorrect+;/ Show users score in an on-screen text field將答案顯示出來(lái),與第一個(gè)例子同displayTotal = totalCorrect;好了,第一幀的函數(shù)寫好了,之后每個(gè)答案的選擇按鈕就簡(jiǎn)單了例如第一題的選項(xiàng)一,就寫:on (release) answer(1);第二題的寫法同上(如果你的選擇題有很多道
42、,做法都是一樣的,只要復(fù)制第一題,然后把題目改了就行)最后在quizEnd幀里面調(diào)用改題的函數(shù) gradeUser();分析第二個(gè)例子是代碼,你會(huì)發(fā)現(xiàn)比第一個(gè)例子精簡(jiǎn)了很多。而集中在同一幀的代碼,將:*更容易修改*更容易升級(jí)*更少的出錯(cuò)機(jī)會(huì)*更容易查錯(cuò)*更精簡(jiǎn)(更少的字節(jié)數(shù))第九章數(shù)組(arrays)在下一個(gè)新版本的多選題里,我們將使用什么AS的特性,來(lái)讓它更好呢?那就是數(shù)組。數(shù)組就是一系列的數(shù)據(jù)(MOOC又開始上課了,chocobo的英文和計(jì)算機(jī)都不算好,為免誤人子弟,概念性的東西盡量精簡(jiǎn))例如這樣兩個(gè)變量?jī)?chǔ)存的數(shù)據(jù):fruit1 = oranges;fruit2 = apples;它們是互
43、相獨(dú)立的,使用起來(lái)很不方便,我們需要的是數(shù)組,以下是數(shù)組的定義方法,用“”框住,用“,”分隔開每個(gè)元素:fruitList = ora nges, apples;現(xiàn)在兩個(gè)數(shù)據(jù)是放到同一個(gè)數(shù)組里面了,我們開始詳細(xì)解說(shuō)數(shù)組數(shù)組里面每一個(gè)數(shù)據(jù)稱為元素(element)。而每一個(gè)元素都有個(gè)獨(dú)立數(shù)字代表所處的位置,數(shù)字叫索引(index),注意!第一個(gè)數(shù)據(jù)的索引是0,第二個(gè)才是1要按索引來(lái)提出數(shù)據(jù),我們要用一個(gè)運(yùn)算符,例如使用fruitList第一個(gè)元素賦值給a:a=fruitList;又例如將a的值賦給fruitList第一個(gè)元素:fruitList& #0;=a;當(dāng)然里面也可以放表
44、達(dá)式、變量:var i ndex = 3;/ Set nu mApples to 2var a = fruitList in dex;下面是個(gè)使用表達(dá)式的例子:/ Create a myFrames array. Note the legal formatting.建立一個(gè)記錄 LABEL的數(shù)組var myFrames = storyE ndin g1,storyE ndi ng2,storyE ndin g3,storyE ndi ng4;/ Set ran domFrame to a ran domly picked eleme nt of myFrames/ by calculati n
45、g a ran dom nu mber betwee n 0 and 3/隨機(jī)從數(shù)組中提取一個(gè) LABELvar randomFrame = myFramesMath.floor(Math.random() * 4);/ Now go to the random frame/然后跳到該LABEL播放gotoA ndStop(ra ndomFrame);而數(shù)組包含數(shù)據(jù)的個(gè)數(shù)稱為長(zhǎng)度(length),例如fruitList.length就等于2對(duì)數(shù)組最常用的處理就是從數(shù)組中選出有用的數(shù)據(jù)了,來(lái)看一個(gè)運(yùn)用循環(huán)的例子:/ Create an array建立數(shù)組,里面放了一些歌的類型var soun d
46、tracks = electro nic.hip hop,pop,alter native,classical;/ Check each eleme nt to see if it contains hip hop/ 一個(gè)循環(huán),檢查每一個(gè)元素是否等于 hip hop這個(gè)類型/另外,請(qǐng)留意此處 MOOC對(duì)FOR的寫法,J=0之前有一個(gè)VAR這好象可有可無(wú),其實(shí)是一個(gè)好習(xí)慣!for (var j = 0; j soun dtracks .len gth; j+) trace( now exami ning eleme nt: + j);if (so un dtracks。 = hip hop) t
47、race(the locati on of hip hop is in dex: + j);break; / 跳出循環(huán),找到了就不用再找了關(guān)于數(shù)組的方法(method)方法就是從屬于某一對(duì)象(object)的函數(shù),通常都是對(duì)該對(duì)象進(jìn)行處理的函數(shù)好象太抽象了?我們還沒(méi)講到什么是對(duì)象,其實(shí)數(shù)組是對(duì)象的一種,我們就暫且將數(shù)組的方法理解為一個(gè)專門處理數(shù)組內(nèi)數(shù)據(jù)的結(jié)構(gòu)和內(nèi)容的工具吧 例如一個(gè)叫push()的方法就是一個(gè)工具,用于為數(shù)組添加一個(gè)元素,并且加在該數(shù)組的最后使用起來(lái)并不復(fù)雜,看例子就知:/ Create an array with 2 eleme ntsvar men ultems = hom
48、e, quit;/ Add an eleme nt力口一個(gè)元素/ men ultems becomes home, quit, products/ 現(xiàn)在數(shù)組的結(jié)構(gòu)變成home, quit, productsmenul tems.push(products);/ Add two more eleme nts這次是加兩個(gè)/ men ultems becomes home, quit, products, services, con tactmenul tems.push(services, con tact);跟push()相反從最后彈出一個(gè)元素的方法是 pop()而跟push()類似,但是是將一
49、個(gè)元素加到數(shù)組的開頭的方法是unshift(),與之相反的是shift()方法sort和reverse,用于重新排列數(shù)組的元素方法splice用于從數(shù)組中間刪除某元素方法slice和con cat可以在某些數(shù)組的基礎(chǔ)上生成另一個(gè)新的數(shù)組方法toString 和join可以將整個(gè)數(shù)組變成單一個(gè)字符串以上方法都可以從AS字典里面查到第十章第三個(gè)版本的選擇題首先,此版本沿用了上一版本的函數(shù)answer和gradeUser在這一版本中,用戶的答案與正確答案將使用數(shù)組來(lái)存放看看我們的新代碼:stop();/ * ln it mai n timeli ne variablesvar displayTota
50、l; / Text field for displaying users final scorevar n umQuesti ons = 2; / Number of questio ns in the quizvar totalCorrect = 0; / Number of correct an swers/上一版本中,用戶答案使用了兩個(gè)變量來(lái)存放,但是試想如果是10題、100題呢?使用數(shù)組將更容易管理,也更容易處理var userA nswers = new Array(); / Array containing users guesses這是定義數(shù)組的語(yǔ)句,但是還未輸入數(shù)據(jù)var co
51、rrectA nswers = 3, 2; / Array co ntai ning each correct an swer這一句既定義數(shù)組,同時(shí)輸入數(shù)據(jù),因?yàn)檎_答案是已知的/ * Function to register the users an swersfun cti on an swer (choice) / Tack the users answer onto our array將數(shù)據(jù)PUSH進(jìn)數(shù)組,因?yàn)槭琼樞虼痤},所以用方法PUSHuserAnswers.push(choice);/ Do a little navigation, baby/如果答案數(shù)超過(guò)題目總數(shù),自然就跳到q
52、uizEnd幀了/ 注意在本例中,已經(jīng)不用上例的answer.currentAnswer 而是使用userAnswers.length 來(lái)控制問(wèn)題是否結(jié)束/我們甚至可以用correctAnswers.length 來(lái)代替numQuestions,記錄正確答案數(shù)組的長(zhǎng)度,不就是題目總數(shù)嗎?if (userAnswersength = numQuestions) gotoAndStop (quizEnd); else gotoAndStop (q+ (userAnswersength + 1);/ * Function to tally the users scorefunction gradeUser() / Count how many questions were answered correctly./開始改題,這里就不用再用上個(gè)版本的eval啦,那個(gè)東東實(shí)在是難懂兼難用,這個(gè)版本相對(duì)就很清晰明快for (var
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 濮陽(yáng)縣2025年五年級(jí)數(shù)學(xué)第二學(xué)期期末監(jiān)測(cè)模擬試題含答案
- 提升自動(dòng)化水平選擇好的電磁閥解決方案
- 供應(yīng)商選擇與評(píng)估管理制度制度
- 投影水幕設(shè)計(jì)施工方案
- 寧波單層廠房施工方案
- 電力搶修施工方案
- 汽車尾燈資料
- 2025年家居業(yè)務(wù)面試題及答案
- 6個(gè)紅包紙折燈籠的制作方法
- 5年級(jí)下冊(cè)英語(yǔ)單詞第三單元帶讀音朗讀
- 2025年合肥幼兒師范高等??茖W(xué)校單招職業(yè)適應(yīng)性測(cè)試題庫(kù)新版
- 2025年浙江寧波交投公路營(yíng)運(yùn)管理限公司招聘12人高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 勞務(wù)派遣勞務(wù)外包項(xiàng)目方案投標(biāo)文件(技術(shù)方案)
- 第四單元 第三課 拍攝學(xué)校創(chuàng)意短視頻教學(xué)設(shè)計(jì) 2024-2025學(xué)年西交大版(2024)初中信息技術(shù)七年級(jí)上冊(cè)
- 2025年蘇州工業(yè)職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年常考版參考題庫(kù)含答案解析
- 2024年尖葉菠菜種子項(xiàng)目可行性研究報(bào)告
- DB3306T 074-2025 餐用具消毒房管理規(guī)范
- 2025年重慶市初中學(xué)業(yè)水平暨高中招生考試數(shù)學(xué)試題預(yù)測(cè)卷(二)
- “記憶中的人、事兒”為副標(biāo)題(四川眉山原題+解題+范文+副標(biāo)題作文“追求”主題)-2025年中考語(yǔ)文一輪復(fù)習(xí)之寫作
- 2024年吉安職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)附答案
- 消化系統(tǒng)疾病患者的睡眠質(zhì)量改善及失眠應(yīng)對(duì)措施
評(píng)論
0/150
提交評(píng)論