版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Flash編程基礎(chǔ)(言簡意賅適合新人沒有基礎(chǔ)也能看懂啊)教學(xué)提綱ActionScript代碼的輸入與編輯語法與結(jié)構(gòu)錯誤與調(diào)試重點與難點 重點是語法與結(jié)構(gòu),視課堂講授的進度安排教學(xué)內(nèi)容。由于安排的內(nèi)容較多,若課堂上無法所有完畢,則改為回去自學(xué)。教學(xué)內(nèi)容:ActionScript代碼的輸入與編輯Flash是一個集美工、動畫與編程于一體的集成開發(fā)環(huán)境,故而其編程方式與其它純程序開發(fā)的編程方式有所不同。Flash自誕生之日起,就是以美工、動畫為主,以程序為輔的應(yīng)用框架。我們可以理解為,F(xiàn)lash的總體結(jié)構(gòu)就是一個影片剪輯(MovieClip),而幾乎所有的多媒體內(nèi)容都是掛在這個影片剪輯中的某個分支之上,涉及腳本(代碼),形成一個樹形結(jié)構(gòu)。自ActionScript3.0起,這個框架被規(guī)范化為顯示對象層次結(jié)構(gòu)。一個典型的Flash作品的結(jié)構(gòu)如下圖所示:典型的Flash作品的結(jié)構(gòu)這種以動畫為主,代碼為輔的程序框架的好處是顯而易見的,由于游戲開發(fā)的許多工作與畫面設(shè)計打交道,我們運用對象層次結(jié)構(gòu),在直觀的環(huán)境下創(chuàng)作幾乎整個游戲!腳本的從屬地位的好處顯而易見,而其壞處也越來越被人們結(jié)識,就是對于其他程序開發(fā)人員來說,F(xiàn)lash的腳本有些莫名其妙,要想開發(fā)Flash程序,就必須先了解Flash的顯示對象層次結(jié)構(gòu),動畫,時間軸等原本與編程無多大聯(lián)系的知識。目前,F(xiàn)lash界面設(shè)計與代碼設(shè)計的分離成了趨勢,例如通過flex等提供一個完全適合程序員的開發(fā)環(huán)境。由于游戲類型的應(yīng)用,界面與程序結(jié)合非常緊密,所以還是采用原有的框架,在單獨的Flash開發(fā)環(huán)境中完畢所有的工作。雖然Actionscript代碼可以被掛在Flash中的許多分支上,但查看和編輯腳本卻十分方便,由于所有的代碼都在動作面板(腳本編輯器)中輸入和編輯,只要用鼠標(biāo)點擊相應(yīng)的位置或者對象,就會顯示這個位置或?qū)ο笏杏玫拇a。打開一個Flash文檔,按F9鍵,或者點擊【窗口】|【動作】命令,即可打開動作面板。動作面板如下圖所示:動作面板由于接下來要經(jīng)常和動作面板打交道,所以這里對動作面板進行較為具體的介紹。腳本版本選擇:點擊下拉按鈕彈出ActionScript版本列表,選擇其中的一個,則語言元素列表的內(nèi)容會作相應(yīng)的變化。需要注意的是這里修改的是語言元素列表的顯示內(nèi)容,但本文檔的ActionScript版本并不因此而被修改。ActionScript版本選擇語言元素列表:這是一個樹型結(jié)構(gòu)的目錄,它列出了當(dāng)前版本的語言元素、包以及索引。其中每個包里面有一個或多個類,每個類的屬性、方法和事件也都列在樹型結(jié)構(gòu)中。如下圖所示:語言元素列表雙擊其中的一個條目,就可以在代碼窗口添加一行相應(yīng)的代碼,然后用腳本助手或者直接手動進行必要的修改。當(dāng)前代碼位置:當(dāng)前代碼位置指出腳本編輯器中的代碼位于Flash文檔的何處。典型的代碼放置位置是主時間軸的幀上或者是影片剪輯中的幀上。假如是AS2或更早版本,代碼也也許是直接依附在影片剪輯或者按鈕上。做法是單擊一個剪輯或者按鈕,然后打開動作面板,輸入或者編輯其上的代碼。相信有過Flash8或以前版本使用經(jīng)驗的讀者對按鈕上的on函數(shù)再熟悉但是了。工具欄:動作面板的工具欄給出了針對Flash代碼的各種實用的按鈕,這些按鈕的說明如下圖所示:動作面板的工具欄及其解釋點擊按鈕將彈出與語言元素列表內(nèi)容同樣的菜單。點擊按鈕可以在編譯之前查找代碼的語法錯誤,這些錯誤會在輸出窗口中顯示。點擊可以將代碼依據(jù)其結(jié)構(gòu)自動縮進對齊,假如代碼存在語法錯誤,則會提醒語法錯誤,無法套用格式。從起右邊的按鈕,是FlashCS3新增的。這些按鈕和VisualStudio.NET的相關(guān)工具類似,估計是汲取其優(yōu)點而添加的。腳本助手:腳本助手啟動時,會在動作面板的上部顯示當(dāng)前行代碼的結(jié)構(gòu)信息,提供具體的輔助信息。如圖所示,點擊for循環(huán)語句首行時腳本助手顯示的信息:腳本助手啟動腳本助手時無法自由修改腳本代碼,并且擠占了動作面板許多空間,所以它只適合初學(xué)者在不清楚程序結(jié)構(gòu)或者緊張引入語法錯誤的情況下使用。當(dāng)讀者對ActionScript的語法與結(jié)構(gòu)具有一定的了解之后,應(yīng)當(dāng)取消腳本助手,而在代碼窗口中自由地編輯代碼。語法與結(jié)構(gòu)本章節(jié)講解ActionScript的語法與結(jié)構(gòu),但并不按教科書的方式具體講解。而是完全將FlashCS3看作是一種面向?qū)ο蟮木幊涕_發(fā)環(huán)境,以最簡練的代碼講解ActionScript的語法與結(jié)構(gòu)。從簡練的代碼中引申出來的各種編程概念和知識面,則以列表的方式平鋪。這種方法可以使大家運用以前所學(xué)的其它語言的編程知識,快速過渡到ActionScript編程上來。第一段示例代碼打開FlashCS3Professional,選擇【文獻】|【新建】,或者按Ctrl+N,彈出新建文檔對話框。選擇“Flash文檔(ActionScript3.0)”,按擬定新建一個Flash文檔。點擊“圖層1”的第1幀,按【F9】彈出動作面板,輸入以下代碼://這是我第一次寫ActionScript腳本varsum:Number;varcount:Number=5;sum=0;for(vari:Number=1;i<=count;i++){ sum=i*(i+1)/2; trace("1累加到"+i+"的值為:"+sum);}如下圖所示:第一個腳本注意:下文若提到“輸入以下代碼”時,就是在新建文檔的圖層1的第1幀的動作面板中輸入下框中的代碼。在調(diào)試程序前保存文獻是一個良好的習(xí)慣,由于誰也不能肯定剛剛編寫的腳本不會在調(diào)試過程中導(dǎo)致死機,若調(diào)試過程中出現(xiàn)死機或者意外退出Flash程序,那么沒有保存的內(nèi)容將會丟失。按Ctrl+S保存文獻,然后選擇【控制】|【測試影片】,或者按Ctrl+Enter測試影片。這時會彈出兩個窗口,一個是Flash作品的窗口,由于剛才沒有建立任何可見的元素,所以這個窗口是空白的。尚有一個是輸出窗口,當(dāng)有trace輸出語句或者出現(xiàn)語法錯誤的時候就會自動彈出輸出窗口。本段程序測試時輸出窗口如下圖所示:本程序的輸出這段代碼包含以下知識點:代碼注釋的語法變量聲明與賦值的方法數(shù)據(jù)類型與默認值顯式類型指定及其意義程序結(jié)構(gòu)語句基本數(shù)學(xué)運算trace語句介紹現(xiàn)在讓我們一行行地結(jié)識這些代碼://這是我第一次寫腳本這是一行代碼注釋,編譯器將忽略這行文字。注釋提高了代碼的可讀性。單行注釋由“//”開始,在代碼中呈灰色。假如需要多行注釋,則使用“/*”開始,用“*/”結(jié)束。一個典型的多行注釋如下所示:/*********************************Boat.as**輪船類**作者:肖剛**********************************/再看本例接下來的兩行代碼:varsum:Number;varcount:Number=5;這兩行代碼聲明兩個數(shù)值類型的變量sum和count。var是聲明變量的關(guān)鍵字,sum與count是變量名稱。Number指出變量數(shù)據(jù)類型為數(shù)值。第二行代碼聲明變量count的同時賦值一個初始值5。對于面向?qū)ο蟮某绦蛟O(shè)計語言來說,所有的數(shù)據(jù)類型都是對象,都是類。Flash的內(nèi)置類可以分為兩種,一種是基元類型,也被成為原始類型,它們一般用來存儲一些簡樸的數(shù)據(jù),有的原始類型還具有一些針對所存儲的數(shù)據(jù)的屬性和方法。原始類型是構(gòu)建復(fù)雜類的基本元素。另一種是復(fù)雜類,它們是由class關(guān)鍵字定義的類,可以認為是程序的構(gòu)件,一般具有成套的屬性、方法和事件。原始類型的變量直接存儲數(shù)據(jù),而復(fù)雜類型的變量存儲的是類的引用。更多的關(guān)于類與對象的介紹,請參看“Flash的內(nèi)置類”以及“面向?qū)ο蟪绦蛟O(shè)計”章節(jié)。下表列出了ActionScript常用的原始類型,以及其簡要的說明,它們的用法都是大同小異的:數(shù)據(jù)類型說明BooleanBoolean數(shù)據(jù)類型涉及兩個值:true和false。對于此類變量,其它任何值都是無效的。已經(jīng)聲明但尚未初始化的布爾變量的默認值是false。Number此數(shù)據(jù)類型可以表達整數(shù)、無符號整數(shù)和浮點數(shù)。若要存儲浮點數(shù),數(shù)字中應(yīng)當(dāng)涉及一個小數(shù)點。若沒有小數(shù)點,數(shù)字將被存儲為整數(shù)。int存儲32位有符號整形數(shù)據(jù)。使用int類型有助于運用CPU快速解決整形運算的能力。(僅合用于ActionScript3.0)uint存儲32位無符號整數(shù)的數(shù)據(jù)。uint類重要用于像素顏色值(ARGB和RGBA)和int數(shù)據(jù)類型無法很好工作的其它情況。(僅合用于ActionScript3.0)StringString數(shù)據(jù)類型表達16位字符的序列,也許涉及字母、數(shù)字和標(biāo)點符號。字符串存儲為Unicode字符,使用UTF-16格式。對字符串值的操作返回字符串的一個新的實例。默認值假如沒有給變量賦值,變量將采用默認值。變量默認值列表如下:數(shù)據(jù)類型默認值Booleanfalseint0NumberNaNObjectundefinedStringnulluint0未聲明(與類型注釋*等效)undefined其它所有類(涉及用戶定義的類)undefined顯式類型指定:雙引號“:”是類型(type)運算符,用于顯式指定變量的數(shù)據(jù)類型,與var關(guān)鍵字配合使用。它可以指定變量類型、函數(shù)返回類型或函數(shù)參數(shù)類型。在變量聲明或賦值中使用時,此運算符指定變量的類型;在函數(shù)聲明或定義中使用時,此運算符指定函數(shù)的返回類型;在函數(shù)定義中與函數(shù)參數(shù)一起使用時,此運算符指定該參數(shù)預(yù)期的變量類型。顯式指定數(shù)據(jù)類型不僅僅是一個良好的編程習(xí)慣,以便避免運營時出現(xiàn)不匹配情況;同時,對于Flash來說,腳本編輯器支持內(nèi)置類和基于這些類的變量的代碼提醒,從而提高了編程的效率。假如需要為指定的變量的特定對象類型提供代碼提醒就要嚴(yán)格指定變量類型,F(xiàn)lash根據(jù)變量的類型彈出合適的提醒。代碼提醒有兩種:彈出菜單提醒和工具提醒樣式的語法提醒。彈出菜單提醒如下圖所示:彈出菜單提醒由于在之前顯式聲明了變量today為Date(日期)類型,所以當(dāng)用鍵盤敲入“today”然后敲入“.”時,編輯器就會自動列出Date類型的變量的所有屬性和方法供我們選擇。這大大提高了編程的效率,也減少了由于記憶或者輸入錯誤而引起的程序錯誤。語法提醒如下圖所示:語法提醒語法提醒在使用內(nèi)置類的成員函數(shù)時出現(xiàn),如上圖中我們使用了內(nèi)置類Date的getFullYear函數(shù)時,它會提醒我們這個函數(shù)的參數(shù)為空,函數(shù)的返回值為Number類型。程序的基本結(jié)構(gòu):繼續(xù)看接下去的代碼:for(vari:Number=1;i<=count;i++){//內(nèi)部代碼略這是一個for循環(huán)結(jié)構(gòu)。它的標(biāo)準(zhǔn)格式為:for(表達式1;表達式2;表達式3){內(nèi)嵌語句}它的執(zhí)行過程如下:求解表達式1求解表達式2,若其值為真(true),則執(zhí)行內(nèi)嵌語句,若為假(false),則轉(zhuǎn)到第(5)步求解表達式3轉(zhuǎn)回上面第(2)步繼續(xù)執(zhí)行循環(huán)結(jié)束,執(zhí)行for循環(huán)以后的過程使用流程圖來表達的話,for循環(huán)結(jié)構(gòu)的執(zhí)行如下圖所示:for循環(huán)結(jié)構(gòu)雖然表達式1到表達式3可以是任意的單條語句,但是最常用的是它們分別表達循環(huán)變量賦初始值,循環(huán)條件,循環(huán)變量增值,例如本例的代碼。通常的計算機程序總是由若干條語句組成,從執(zhí)行方式上看,從第一條語句到最后一條語句完全按順序執(zhí)行,是簡樸的順序結(jié)構(gòu);若在程序執(zhí)行過程當(dāng)中,根據(jù)用戶的輸入或中間結(jié)果去執(zhí)行若干不同的任務(wù)則為選擇結(jié)構(gòu);假如在程序的某處,需要根據(jù)某項條件反復(fù)地執(zhí)行某項任務(wù)若干次或直到滿足或不滿足某條件為止,這就構(gòu)成循環(huán)結(jié)構(gòu)。順序結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、選擇結(jié)構(gòu)構(gòu)成了結(jié)構(gòu)化程序設(shè)計的三個基本單元,而眾多的基本單元構(gòu)成龐大的程序。順序結(jié)構(gòu)的流程圖如下所示:順序結(jié)構(gòu)典型的選擇結(jié)構(gòu)的流程圖如下所示:典型選擇結(jié)構(gòu)按順序編寫的語句即為順序結(jié)構(gòu),所以沒有結(jié)構(gòu)語句,而循環(huán)結(jié)構(gòu)和選擇結(jié)構(gòu)分別有多種語句結(jié)構(gòu),這些結(jié)構(gòu)如下表所示:結(jié)構(gòu)類型語句以及語法說明循環(huán)結(jié)構(gòu)for(初始值;條件;增值){語句}先賦初始值,然后判斷條件,為真的情況下執(zhí)行語句,然后增值,完畢一次循環(huán),接著重新判斷條件,直到條件為假。for(變量in對象){語句}順序遍歷對象的屬性或數(shù)組中的元素,并對每個屬性或元素執(zhí)行語句。while(條件){語句}當(dāng)條件為真時執(zhí)行語句,然后判斷條件,假如為真,執(zhí)行語句,重新判斷條件,直到條件為假。do{語句}while(條件);先執(zhí)行語句,然后判斷條件,假如為真,繼續(xù)執(zhí)行語句。選擇結(jié)構(gòu)if(條件){語句}判斷條件,假如為真,則執(zhí)行語句。if(條件){語句1}else{語句2}判斷條件,假如為真,執(zhí)行語句1,否則,執(zhí)行語句2。if(條件1){語句1}elseif(條件2){語句2}判斷條件1,假如為真,則執(zhí)行語句1,否則假如條件2為真,則執(zhí)行語句2。switch(變量){case值1:語句1……case值n:語句n[default:語句]}多分支選擇結(jié)構(gòu)。比較變量的值,假如為值1,則執(zhí)行語句1以及以后的語句,假如為值n,則執(zhí)行語句n以及以后的語句。假如只想執(zhí)行某一分支的語句n,則在語句n的最后應(yīng)加break;語句。注:假如讀者沒有結(jié)構(gòu)化程序設(shè)計的基礎(chǔ),可以參考Flash的腳本幫助,打開Flash程序,選擇【幫助】|【Flash幫助】或者按F1就可以打開Flash的幫助面板??梢栽谀夸浿袑ふ一蛘咧苯铀阉鱽碚业揭獙W(xué)習(xí)的內(nèi)容。任何軟件,它的幫助文獻就是最佳的教材?;蛘咦x者也可以找任何一本編程基礎(chǔ)的書籍,翻看之后即會明白。 更多的語句、關(guān)鍵字和指令,可以參考Flash的幫助文獻,其位置如下圖所示:算術(shù)運算:再看本例接下來的一行代碼:sum=i*(i+1)/2;這行代碼的作用是將1~i的整數(shù)數(shù)字累加的結(jié)果放在sum變量中。它使用了多個算術(shù)運算符以及賦值運算符“=”。事實上,可以將這上行代碼用一個for循環(huán)來表達。sum=0;for(varj:Number=1;j<=i;j++){sum=sum+j;}但這明顯增長了代碼的復(fù)雜度。使用累加的公式:則代碼變簡樸,執(zhí)行效率當(dāng)然就提高了。游戲中經(jīng)常需要使得運動滿足各種物理運動規(guī)律,這些規(guī)律都有公式可循,附錄中給出了一些常用的數(shù)學(xué)與物理現(xiàn)象公式以供參考。下表是ActionScript的算術(shù)運算符:運算符說明=賦值運算符?:條件運算符+相加-相減*相乘/相除%取余++自加1--自減1()小括號和代數(shù)運算同樣,程序中的運算符也具有優(yōu)先級,程序總是先執(zhí)行優(yōu)先級最高的運算。上表中,運算符的優(yōu)先級正好從低到高排列(有相同優(yōu)先級的,如加法“+”和減法“-”的優(yōu)先級是同樣的。事實上,程序中的算計運算的優(yōu)先級和中小學(xué)算術(shù)運算的優(yōu)先級是一致的,所以非常好理解。跟蹤調(diào)試函數(shù)trace:再看本例接下來的一行代碼:trace("1累加到"+i+"的值為:"+sum);trace是一個跟蹤調(diào)試的函數(shù),它可以在輸出窗口中一字符串的方式輸出trace函數(shù)的參數(shù),每條trace語句輸出一行字符串。trace語句可以有一個或者多個參數(shù),參數(shù)的類型可以是任意的,事實上,它將條用參數(shù)對象的toString方法,輸出對象的字符串表達方式。本例中使用了字符串連接符“+”將多個字符串連接成一個字符串作為trace函數(shù)的參數(shù)。運算符“+”的兩邊都是數(shù)字的時候表達加法運算,但是假如兩邊有一個是字符串,則表達字符串連接運算。trace語句是調(diào)試程序的好幫手。它可以輸出一些運營時的信息以便檢測程序執(zhí)行和發(fā)現(xiàn)程序錯誤。trace語句在發(fā)布的swf文獻中不起作用,不會對最后結(jié)果導(dǎo)致影響。假如想在調(diào)試過程中暫時不輸出trace的結(jié)果,那么在【文獻】|【發(fā)布設(shè)立】的Flash頁中勾選“省略trace動作”即可。如下圖所示:trace輸出開關(guān)在接下來的例子中,我們還將多次使用到trace語句,用來查看程序執(zhí)行的中間結(jié)果以及最后結(jié)果。涉及在游戲?qū)嵗a中也也許保存著trace語句,那是調(diào)試游戲時留下的,對最終的程序沒有影響,也不必刪除。第二段示例代碼程序說明:建立一個4×6的二維數(shù)組,每個數(shù)組元素保存一個0~10的隨機整數(shù),然后輸出這個數(shù)組。新建Flash文檔,輸入以下代碼://定義一維數(shù)組varmyArray:Array=newArray(4);for(vari=0;i<4;i++){ //一維數(shù)組的每個元素為一個新的一維數(shù)組 myArray[i]=newArray(6); for(varj=0;j<6;j++){ //給數(shù)組元素賦隨機值 myArray[i][j]=int(Math.random()*10); } //輸出一維數(shù)組myArray[i] trace(myArray[i]);}按Ctrl+Enter測試影片,則輸出這個二維數(shù)組的值。某次的輸出如下:3,8,7,4,0,40,6,0,1,1,86,0,6,7,5,01,9,8,5,6,4這段代碼包含以下的知識點:數(shù)組對象以及多維數(shù)組的使用嵌套循環(huán)內(nèi)建數(shù)學(xué)類Math的使用數(shù)據(jù)類型轉(zhuǎn)換編譯器的嚴(yán)謹模式與非嚴(yán)謹模式現(xiàn)在來解釋這些代碼,先看第一行代碼:varmyArray:Array=newArray(4);這里聲明了一個Array類型的變量myArray,并用new關(guān)鍵字創(chuàng)建這個Array對象的實例,初始化其長度為4。Array是一個用來表達一維數(shù)組的數(shù)據(jù)類型,它可以存儲任意類型的數(shù)據(jù)或?qū)ο?。?shù)組是游戲程序中頻繁使用到的一種數(shù)據(jù)類型。用變量名稱引用數(shù)組對象,訪問數(shù)組的每個元素則使用下標(biāo)運算符“[]”,下標(biāo)從0開始編號。假設(shè)數(shù)組元素存儲的是另一個數(shù)組,那么就構(gòu)成了二維數(shù)組,以此類推。多維數(shù)組的的訪問采用多個下標(biāo)運算符即可。Array是一個復(fù)雜對象,必須用new關(guān)鍵字創(chuàng)建它的實例,否則聲明的變量無法訪問,由于ActionScript要通過new關(guān)鍵字給復(fù)雜對象在內(nèi)存中開辟一個空間,存儲這個對象之用。也可以創(chuàng)建一個空的數(shù)組對象,或者創(chuàng)建數(shù)組對象的同時給數(shù)組賦值。如下代碼所示://創(chuàng)建一個空的數(shù)組varmyArray1:Array=newArray();//創(chuàng)建一個有三個元素的數(shù)組,元素值分別為1,2,3varmyArray2:Array=newArray(1,2,3);數(shù)組對象不僅僅為我們提供了存儲數(shù)組的數(shù)據(jù)結(jié)構(gòu),同時還提供了一些基于數(shù)組的屬性和操作函數(shù)等,例如數(shù)組的長度、給數(shù)組元素排序等等。這里不一一舉例說明,而僅以列表的方式給出數(shù)組對象Array常用的成員:成員說明length屬性,表達數(shù)組中元素數(shù)量的非負整數(shù)。Array(numElements:int=0)允許創(chuàng)建指定元素數(shù)量的數(shù)組,默認為0。Array(...values)允許創(chuàng)建包含指定元素的數(shù)組。concat(...args):Array將參數(shù)中指定的元素(組)附加到數(shù)組中,形成新的數(shù)組。forEach(callback:Function,thisObject:*=null):void對數(shù)組中的每一項執(zhí)行函數(shù)。pop():Object刪除數(shù)組中最后一個元素,并返回該元素的值。push(...args):uint將一個或多個元素添加到數(shù)組的結(jié)尾,并返回該數(shù)組的新長度。reverse():Array倒轉(zhuǎn)數(shù)組的順序。shift():Object刪除數(shù)組中第一個元素,并返回該元素。slice(startIndex:int=0,endIndex:int=16777215):Array返回由原始數(shù)組中某一范圍的元素構(gòu)成的新數(shù)組,而不修改原始數(shù)組。some(callback:Function,thisObject:*=null):Boolean對數(shù)組中的每一項執(zhí)行測試函數(shù),直到獲得返回true的項。sort(...args):Array對數(shù)組中的元素進行排序。splice(startIndex:int,deleteCount:uint,...values):Array給數(shù)組添加元素以及從數(shù)組中刪除元素。unshift(...args):uint將一個或多個元素添加到數(shù)組的開頭,并返回該數(shù)組的新長度。類成員的使用方法為:變量名.成員名假如成員為一函數(shù),則需要加括號“()”,假如函數(shù)有參數(shù),則放在括號里面,多個參數(shù)用逗號“,”隔開。Array對象不僅有以上這些成員,尚有一些被稱為靜態(tài)常數(shù)的成員。所謂的靜態(tài)成員,是指使用類名引用而不是類實例名引用的成員。靜態(tài)成員一般用于輔助此類相關(guān)的一些操作。例如Array.NUMERIC就是一個Array類的靜態(tài)屬性(也稱為常數(shù)),在對數(shù)進行排序的時候用來表達按數(shù)值大小的順序排序而不是字符串編碼的順序排序。提醒:本書中有許多的知識列表,為了節(jié)約篇幅,這些列表一般都是通過精簡,剔除了游戲程序中不用或者很少使用到的項。讀者若想了解這些被精簡的項,可以參考Flash幫助文獻。嵌套循環(huán):再看看接下來的一段代碼:for(vari=0;i<4;i++){ //一維數(shù)組的每個元素為一個新的一維數(shù)組 myArray[i]=newArray(6); for(varj=0;j<6;j++){ //給數(shù)組元素賦隨機值 myArray[i][j]=int(Math.random()*9); }}這段代碼的結(jié)構(gòu)為嵌套的循環(huán)結(jié)構(gòu)。第一層循環(huán)給myArray數(shù)組的每一個元素賦值一個新的數(shù)組,第二層循環(huán)為myArray數(shù)組的每個元素所表達的數(shù)組的每個元素賦隨機的初始值。這段代碼用流程圖表達如下:嵌套循環(huán)上圖中,內(nèi)部循環(huán)結(jié)構(gòu)可以看作是一個簡樸的表達式,它與其前一條語句組成順序結(jié)構(gòu),而這個順序結(jié)構(gòu)又可以看作是一個簡樸的表達式,而成為外部循環(huán)結(jié)構(gòu)的內(nèi)嵌表達式。一個完整的程序,是有著大量的順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)嵌套、組合的的復(fù)合體。純熟使用結(jié)構(gòu)化程序設(shè)計思想是編寫復(fù)雜程序的基礎(chǔ)。Math類:這段代碼還用到了Flash內(nèi)建的數(shù)學(xué)類Math的一個靜態(tài)方法:random(),它的作用是生成一個0~1之間的隨機小數(shù)。Math是Flash內(nèi)嵌的數(shù)學(xué)計算輔助類,開發(fā)游戲經(jīng)常要和這個類打交道。它是一個靜態(tài)類,包含一些靜態(tài)函數(shù)和靜態(tài)屬性,以提供常用的數(shù)學(xué)方法和數(shù)學(xué)常數(shù),在程序的任何地方都可以調(diào)用這些成員。例如表達圓周率π的常數(shù)為Math.PI。下面這行代碼計算面積為area的圓的半徑:r=Math.sqrt(area/Math.PI);下表列出了Math對象的部分常數(shù)。常數(shù)說明E代表自然對數(shù)的底的數(shù)學(xué)常數(shù),表達為e。LN10代表10的自然對數(shù)的數(shù)學(xué)常數(shù),其近似值為2.046。LN2代表2的自然對數(shù)的數(shù)學(xué)常數(shù),其近似值為0.69353。PI代表一個圓的周長與其直徑的比值的數(shù)學(xué)常數(shù),其近似值為3.9793。SQRT1_2代表1/2的平方根的數(shù)學(xué)常數(shù),其近似值為0.5476。SQRT2代表2的平方根的數(shù)學(xué)常數(shù),其近似值為1.40951。Math還包含了一些數(shù)學(xué)函數(shù)。在游戲編程中將經(jīng)常用到這些方法。下表列出了Math對象的部分數(shù)學(xué)函數(shù):函數(shù)說明abs(x)返回由參數(shù)x指定的數(shù)字的絕對值。acos(x)返回由參數(shù)x指定的數(shù)字的反余弦值。asin(x)返回由參數(shù)x指定的數(shù)字的反正弦值。atan(tangent)返回角度值,該角度的正切值已由參數(shù)tangent指定。cos(x)返回指定角度的余弦值。exp(x)返回自然對數(shù)的底的x次冪的值。log(x)返回參數(shù)x的自然對數(shù)。pow(x,y)計算并返回x的y次冪。random()返回一個偽隨機數(shù)n,其中0<=n<1。round(x)將參數(shù)x的值向上或向下舍入為最接近的整數(shù)并返回該值。sin(x)以弧度為單位計算并返回指定角度的正弦值。sqrt(x)計算并返回指定數(shù)字的平方根。tan(x)計算并返回指定角度的正切值。注:上表中的所有三角函數(shù)和反三角函數(shù)都是以弧度制為單位。Math完整的常數(shù)和方法請參看腳本提醒,或者查看Flash的幫助文獻。類型轉(zhuǎn)換這段代碼中,在給二維數(shù)組的每個元素賦值以前,先將隨機數(shù)進行了強制類型轉(zhuǎn)換:int(),它的作用是將隨機生成的小數(shù)轉(zhuǎn)換成整數(shù)。將某種類型的數(shù)據(jù)(對象)轉(zhuǎn)換為其它類型的數(shù)據(jù)(對象)時,就說發(fā)生了類型轉(zhuǎn)換。類型轉(zhuǎn)換有兩種:一種是隱式轉(zhuǎn)換,另一種是顯式轉(zhuǎn)換。隱式轉(zhuǎn)換又稱為強制轉(zhuǎn)換,是代碼中沒有指示卻事實上進行了的類型轉(zhuǎn)換,在運營時由FlashPlayer執(zhí)行。隱式轉(zhuǎn)換發(fā)生在以下情況中:在賦值語句中在將值作為函數(shù)的參數(shù)傳遞時在從函數(shù)中返回值時在使用某些運算符(如加法運算符(+))的表達式中顯式轉(zhuǎn)換由代碼指示編譯器將一個數(shù)據(jù)類型的變量視為屬于另一個數(shù)據(jù)類型時發(fā)生。語法為:目的類型(被轉(zhuǎn)換對象)例如:varquantityField:String="3";varquantity:int=int(quantityField);//顯式轉(zhuǎn)換不管是顯式轉(zhuǎn)換還是隱式轉(zhuǎn)換,其內(nèi)部的算法都是同樣的。類型轉(zhuǎn)換之后,也許會發(fā)生值的改變。例如Number類型轉(zhuǎn)換成int類型,則會將小數(shù)點后面的數(shù)值截斷,將數(shù)值類型轉(zhuǎn)換成Boolean類型時,非0值轉(zhuǎn)換成true,而0轉(zhuǎn)換成false。假如轉(zhuǎn)換的目的類型是復(fù)雜類,則被轉(zhuǎn)換對象應(yīng)當(dāng)是相關(guān)類型,相關(guān)類型指具有繼承關(guān)系的類型。所有的復(fù)雜類都繼承自O(shè)bject類,所以所有復(fù)雜類都可以轉(zhuǎn)換為Object類。MovieClip類繼承自Sprite類,所以MovieClip類可以轉(zhuǎn)換成Sprite類,但是Sprite類不能轉(zhuǎn)換成MovieClip類,由于MovieClip類不是Sprite類的相關(guān)類型。Date類與MovieClip類之間互不繼承,所以它們之間不能互相轉(zhuǎn)換。在類型轉(zhuǎn)換中假如出現(xiàn)類型不匹配,則會出現(xiàn)錯誤。假如編譯器為嚴(yán)謹模式,則在編譯的時候就會彈出編譯錯誤,程序無法編譯完畢,但是假如是標(biāo)準(zhǔn)模式,則會在程序運營到類型匹配錯誤的時候才彈犯錯誤。當(dāng)程序比較龐大時,越早發(fā)現(xiàn)錯誤越好,所以程序員都傾向于使用嚴(yán)謹模式。修改嚴(yán)謹模式的方法為:選擇【文獻】|【發(fā)布設(shè)立】,然后選擇“Flash”標(biāo)簽,在ActionScript版本下來框中選擇“ActionScript3.0”,然后點擊旁邊的“設(shè)立”按鈕,彈出“ActionScript3.0設(shè)立”嚴(yán)謹模式設(shè)立勾選“嚴(yán)謹模式”即可。新建的AS3文檔默認使用嚴(yán)謹模式,但AS2無嚴(yán)謹模式的概念,假如您使用的是由AS2文檔轉(zhuǎn)換過來的AS3文檔,則默認使用非嚴(yán)謹模式。此外,嚴(yán)謹模式還規(guī)定變量都要先聲明才干使用,假如在發(fā)布設(shè)立中取消了嚴(yán)謹模式,則Flash可以不顯式聲明變量(即不使用var關(guān)鍵字聲明變量)。如varcount:Number=5;可以寫成count=5;兩者的效果是同樣的,F(xiàn)lash在第一次使用這個變量的時候自動定義這個變量,并且根據(jù)所賦的值的類型擬定變量的數(shù)據(jù)類型。但有經(jīng)驗的程序員都明白,先聲明后使用的嚴(yán)謹編程習(xí)慣,對減少編程錯誤、維護復(fù)雜程序等方面是非常故意義的做法,目前絕大多數(shù)編程語言都逐漸摒棄了非嚴(yán)謹模式,AS3因向下兼容的需要而保存了這個選項。第三段示例代碼程序說明:尋找一個1000以內(nèi)的,能被7整除并且二進制數(shù)的第四位是0第五位是1的數(shù)字。新建Flash文檔,輸入以下代碼:vartestNumber;varcount=0;do{ count++; //隨機產(chǎn)生一個1~1000之間的整數(shù) testNumber=Math.round(Math.random()*1000);}while(!correctNumber(testNumber));trace("找到一個能被7整除并且二進制數(shù)的第四位是0第五位是1的數(shù)字:\r"+testNumber);trace("總共循環(huán)了\""+count+"\"次");functioncorrectNumber(para1:Number):Boolean{ if(para1%7==0&&(para1>>3)%4==2){ returntrue; }else{ returnfalse; }}按Ctrl+Enter測試影片。會得到如下的輸出結(jié)果:找到一個能被7整除并且二進制數(shù)的第四位是0第五位是1的數(shù)字:693總共循環(huán)了"5"次代碼說明:這段代碼的執(zhí)行過程是先隨機生成一個1~1000的整數(shù),然后判斷它是否滿足給出的條件,假如不是,那么重新生成一個隨機數(shù),重新判斷,直到找到一個滿足條件的數(shù)字,最后輸出這個數(shù)字以及循環(huán)的次數(shù)。這段代碼包含以下知識點:自定義函數(shù)邏輯運算符復(fù)合邏輯關(guān)系關(guān)系運算符位運算符轉(zhuǎn)義字符現(xiàn)在來解釋一下其中的一些關(guān)鍵代碼:testNumber=Math.round(Math.random()*1000);這里再次使用了Math對象的兩個方法,用來產(chǎn)生一個1000以內(nèi)的隨機整數(shù)。回到示例代碼,看看下面這行代碼:while(!correctNumber(testNumber));這是dowhile循環(huán)結(jié)構(gòu)中的條件部分。它調(diào)用了一個自定義函數(shù)correctNumber(),它有一個數(shù)值類型的參數(shù),當(dāng)參數(shù)不是目的數(shù)值,則函數(shù)返回值為false時,由于進行了非運算(!),條件變成true,程序進入下一次循環(huán),即繼續(xù)執(zhí)行do語句后面的代碼,直到當(dāng)參數(shù)就是目的數(shù)值,函數(shù)返回值為true,進行非運算之后變成false,不滿足循環(huán)條件,才跳出循環(huán)。自定義函數(shù):函數(shù)correctNumber()實現(xiàn)了是否是所要數(shù)字的判斷,是這段程序的重要組成部分。使用函數(shù)可以提高代碼的可讀性和可維護性,一般在如下情況下使用函數(shù):代碼的輸入和輸出比較簡樸而中間過程比較復(fù)雜。使用函數(shù)使得在直觀上把實現(xiàn)的細節(jié)隱藏,提高了代碼的可讀性。在多個地方都要使用到相同的代碼,或者只有參數(shù)不同的代碼。就是說這段代碼是為了完畢某個常用的任務(wù)。例如在一個拼圖游戲里面,點擊任意一個方塊都會執(zhí)行相應(yīng)的移動(或者不移動)方塊的操作。初學(xué)者往往習(xí)慣于把相關(guān)程序放在每個方塊對象上。這導(dǎo)致代碼的大量冗余,可維護性差。而聰明的方法是將相應(yīng)的操作寫成一個函數(shù),然后通過對象的事件解決函數(shù)調(diào)用這個函數(shù),并將被點擊對象的標(biāo)記符(自定義)屬性作為這個函數(shù)的參數(shù)。某一大段代碼是為了完畢某個單一的任務(wù)。這同樣是為了提到代碼的可讀性。經(jīng)驗表白,每個程序塊在30自然行以內(nèi)比較方便維護。也就是說,假如你有段代碼超過30行,那么應(yīng)當(dāng)考慮是否要使用函數(shù)切分這個程序塊了。說了這么多,現(xiàn)在來看看如何實現(xiàn)自定義函數(shù)吧!自定義函數(shù)的語法如下:function函數(shù)名(參數(shù)列表)[:返回類型]{函數(shù)內(nèi)部代碼[return返回值]}注:方括號表達其為語法結(jié)構(gòu)中的可選項。自定義函數(shù)的另一種語法是:函數(shù)名=function(參數(shù)列表)[:返回類型]{函數(shù)內(nèi)部代碼[return返回值]}函數(shù)可以沒有參數(shù),也可以有多個參數(shù),多個參數(shù)用逗號隔開。返回類型指定這個函數(shù)返回的是什么類型的數(shù)據(jù),由函數(shù)內(nèi)部代碼中的return語句返回。假如函數(shù)沒有返回值,則返回類型為void。一個有趣的現(xiàn)象是在AS2中,函數(shù)可以嵌套定義。也就是說,可以將一個函數(shù)定義在另一個函數(shù)之中。這樣,就可以通過函數(shù)來組織一個數(shù)據(jù)+操作的結(jié)構(gòu)。這樣的函數(shù)結(jié)構(gòu)與類(Class)已經(jīng)很接近了。再繼續(xù)看這行代碼:if(para1%7==0&&(para1>>3)%4==2){邏輯運算符:&&是一個邏輯運算符。表達邏輯關(guān)系“與”,只有&&兩邊的表達式都為true,結(jié)果才為true。ActionScript提供三種邏輯運算符:運算符執(zhí)行的運算&&(AND)邏輯"與"||(OR)邏輯"或"?。∟OT)邏輯"非"復(fù)合邏輯關(guān)系:這是一個if條件結(jié)構(gòu)的一部分,括號內(nèi)部是一個Boolean類型值。它可以由多個邏輯值通過邏輯運算符組合而成,這個組合就是復(fù)合邏輯表達式,復(fù)合的結(jié)果要么是true,要么是false。下表是最簡的復(fù)合判斷表:運算符結(jié)果A&&B(與)若A、B皆為true則返回true,否則返回falseA||B(或)只要A、B中有一個為true,就返回true,否則返回false!A(非)若A為true,返回false,若A為false,返回true關(guān)系運算符:testNumber%7==0是一個關(guān)系判斷語句,先把testNumber對7求余數(shù),然后比較“==”號兩邊的數(shù)值,假如==號兩邊的值相等,則結(jié)果為true,否則結(jié)果為false?!?=”號是一個關(guān)系運算符。和其它編程語言同樣,ActionScript提供豐富的關(guān)系運算符。它們都有兩個操作數(shù),比較兩個操作數(shù)的值,然后依據(jù)比較的規(guī)則返回一個布爾值。ActionScript中的關(guān)系運算符列表如下:運算符執(zhí)行的運算<小于>大于<=小于或等于>=大于或等于==等于===假如兩者相等并且數(shù)據(jù)類型也相同時成立!===假如兩者不相等并且數(shù)據(jù)類型也不相同時成了instanceof假如運算符左邊的變量原型是右邊所示的類時成立此表中的所有運算符都具有相同的優(yōu)先級并且高于所有的邏輯運算符。位運算符:這段代碼中有一個位運算符“>>”,它的作用是直接將數(shù)值的二進制數(shù)按位向右移動3位,被移出的部分自動剔除而空缺的位自動補0。例如假設(shè)para1=173,省略高位的0,則其二進制表達為:10101101。右移3位之后則變成10101,十進制的數(shù)值為:21。Flash提供豐富的位操作符。使用位操作的優(yōu)點是它提供了一種新的運算方式,并且由于它直接操作二進制數(shù),提高了計算的速度。常用位運算表如下:運算符執(zhí)行的運算&按位"與"|按位"或"<<左移>>右移^按位異或轉(zhuǎn)義字符:再看本例接下來的代碼:trace("找到一個能被7整除并且二進制數(shù)的第四位是0第五位是1的數(shù)字:\r"+testNumber);trace("總共循環(huán)了\""+count+"\"次");這兩條trace語句與先前不同的是使用了轉(zhuǎn)義字符。轉(zhuǎn)義字符指那些不能直接在字符串中表達出來的字符,由于這些字符被引作它用。例如雙引號“””,在程序中用來表達字符串的開始或者結(jié)束。假如某字符串自身具有雙引號,則必須使用轉(zhuǎn)義字符。轉(zhuǎn)義字符以反斜杠“\”標(biāo)記,反斜杠的轉(zhuǎn)義字符為兩個反斜杠“\\”。下表是一些常用的轉(zhuǎn)義字符。轉(zhuǎn)義序列說明\b退格符。\f換頁符。\n換行符。\r回車。\t制表符。\unnnn任意的Unicode字符,字符代碼由十六進制數(shù)字nnnn指定。例如,\u263a是一個微笑字符。\xnn任意的ASCII字符,字符代碼由十六進制數(shù)字nn指定。\'單引號。\"雙引號。\\單反斜杠字符。自此我們已經(jīng)用三個簡短的代碼將ActionScript腳本語言的語法結(jié)構(gòu),以及數(shù)組的使用,內(nèi)置類的使用進行的大體的講解。由于本書的定位不是講解ActionScript的用法,而是用ActionScript開發(fā)游戲,所以僅對這些基礎(chǔ)知識點到為止。錯誤與調(diào)試程序錯誤有三種,一種是語法錯誤,編譯時提醒編譯錯誤并列出發(fā)現(xiàn)錯誤所在位置。一種是運營時錯誤,編譯通過了,但是在程序運營的時候出現(xiàn)了錯誤。尚有一種是邏輯錯誤,就是程序不會拋出任何錯誤,但是無法得到“應(yīng)有”的結(jié)果。語法錯誤與解決所有的語法錯誤都在點擊語法檢查或者按Ctrl+Enter編譯時在輸出窗口中報錯,只有沒有語法錯誤的代碼才干通過編譯器編譯。先看看語法錯誤的例子,新建Flash文檔,輸入以下代碼:vartoday:Date=newDate();trace("今天是:");trace(today.getFullYear()+"年+(today.getMonth()+1)+"月"+today.getDate()+"日");按Ctrrl+Enter測試影片,會看到輸出窗口輸出兩個編譯錯誤:語法錯誤雙擊其中的一條錯誤,即可跳轉(zhuǎn)到發(fā)現(xiàn)錯誤所在的代碼行。錯誤描述則給出了關(guān)于錯誤的具體說明,根據(jù)錯誤描述可以比較容易就找到錯誤的因素所在。需要注意的是,錯誤提醒給出的錯誤位置和錯誤描述并不一定準(zhǔn)確無誤。由于編譯器只有按語法規(guī)則在代碼發(fā)現(xiàn)語法錯誤的時候才報錯,但此時也許已通過了實際錯誤所在,或者是由其它錯誤連帶引起的語法錯誤。如上面的例子,實際錯誤是在“年”字后面少了一個雙引號“””。但是程序執(zhí)行到這個位置的時候并不會發(fā)現(xiàn)錯誤,由于編譯器把“年+(today.getMonth()+1)+”當(dāng)作是一個字符串,直到“月”字才發(fā)現(xiàn)語法錯誤。編譯器認為“月”是一個變量,而它與前面的字符串之間缺少了連接符。同時編譯器還發(fā)現(xiàn)了連帶引起的語法錯誤:在該語句結(jié)尾字符串沒有結(jié)束。事實上并不一定要在編譯的時候才干檢測語法錯誤。一種簡樸的方法是看代碼的顏色。ActionScript代碼帶有某些色彩,以便區(qū)分各種類型的標(biāo)記符。默認情況下,關(guān)鍵字是藍色,字符串是綠色,注釋是灰色,函數(shù)與變量是黑色。假如發(fā)現(xiàn)非預(yù)期的顏色,就可以確認代碼中存在語法錯誤。例如本例的代碼在動作面板中的顏色為:代碼的顏色尚有一個方法是點擊動作面板上的語法檢查按鈕。假如有錯誤,則會彈出輸出窗口并顯示當(dāng)前代碼的所有語法錯誤。提醒編譯器錯誤避免運營時錯誤與邏輯錯誤排除運營時錯誤和邏輯錯誤是一件費時費力的工作。Flash游戲特別如此,由于FlashPlayer往往以嵌入在其它軟件中的形式存在,為了不把錯誤傳遞給它的“載體”,F(xiàn)lashPlayer將幾乎所有的錯誤都“藏”了起來,甚至在調(diào)試時也不提醒錯誤。隱藏錯誤增強了程序執(zhí)行時的穩(wěn)定性,但卻給開發(fā)人員排除錯誤留下不少的困難。所幸的是3.0已經(jīng)采用了積極的措施,引入了成套的錯誤解決機制,大大減少了除錯的難度。在講解如何除錯之前,應(yīng)當(dāng)一方面考慮如何減少錯誤。養(yǎng)成良好的編程習(xí)慣是必要的。以下是一些建議:采用一致的命名規(guī)則附錄中給出了ActionScript程序員共同遵循的一組命名規(guī)則,讀者最佳也遵循這樣的命名規(guī)則。多添加注釋假如沒有注釋,即使是自己寫的程序,時間久了閱讀起來也存在困難。修改起來就更加麻煩,更加容易引入錯誤。應(yīng)用軟件工程的思想,做到高內(nèi)聚低耦合高內(nèi)聚低耦合是軟件設(shè)計的一個基本原則,說的是在程序的各個模塊中,盡量讓每個模塊獨立,同時相關(guān)的解決盡量在單個模塊中完畢。這樣能提減少各模塊的之間的聯(lián)系,減少“牽一發(fā)而動全身”的幾率,提高開發(fā)效率,減少升級維護成本,也便于進行單元測試,提高軟件質(zhì)量。即使小到一個函數(shù),也應(yīng)當(dāng)遵照這個原則。在程序中采用合適的錯誤解決機制雖然沒有錯誤解決機制程序一般能順利運營,但程序不會總是按抱負的方式運營。例如加載外部文獻,假如文獻不存在了,自然程序就會不正常。網(wǎng)絡(luò)通信、用戶操作、文獻讀寫、條件局限性、設(shè)備忙是常見的犯錯地方,在這些地方添加錯誤捕獲機制可以捕獲這些錯誤,然后作相應(yīng)的解決。采用了錯誤解決機制的程序可以適應(yīng)更加“惡劣”的使用環(huán)境,使得程序更加健壯。ActionScript2.0可以使用Error類,使用try-catch-finally機制捕獲錯誤,或者重載錯誤事件。Error類是遵循ECMAScript規(guī)范的核心類,ActionScript3.0中仍然可以使用,也可以使用偵聽器捕獲錯誤事件,關(guān)于偵聽器的使用請參看相關(guān)的章節(jié)。同時它還采用flash.errors類包中的類捕獲更確切的錯誤。提醒:在錯誤解決方面,ActionScript3.0比ActionScript2.0有了比較大的改善。它提供了更加貼切的語法錯誤消息、更多的警告、拋出更多的錯誤以及擴展的捕獲錯誤的體系結(jié)構(gòu)。調(diào)試時,3.0出現(xiàn)錯誤后就停止執(zhí)行代碼,而2.0卻會在錯誤情況下繼續(xù)執(zhí)行。try-catch-finally機制舉例:新建文檔(AS3),輸入以下代碼://僅合用于ActionScript3.0及以上版本importflash.errors.IOError;importflash.media.Sound;varmusic:Sound=newSound();try{ music.close(); trace("聲音停止了");}catch(error:IOError){ trace("聲音流關(guān)閉出現(xiàn)錯誤:\r"+error.toString()); trace("更多的錯誤解決代碼");}finally{ trace("不管是否捕獲到錯誤,這段代碼都被執(zhí)行"); //一般在此處做釋放內(nèi)存操作}一方面用import語句導(dǎo)入FlashPlayer的兩個API,然后創(chuàng)建一個API對象Sound的實例music,接著嘗試關(guān)閉music。由于music實例還加載聲音流,所以使用close方法的時候犯錯,F(xiàn)lash拋出IOError,被try-catch結(jié)構(gòu)捕獲,程序跳入catch部分進行一些解決。按Ctrl+Enter測試影片,得到如下的輸出:聲音流關(guān)閉出現(xiàn)錯誤:Error:Error#2029:此URLStream對象中沒有已打開的流。更多的錯誤解決代碼不管是否捕獲到錯誤,這段代碼都被執(zhí)行從結(jié)果中可以看出,當(dāng)music實例close的時候觸發(fā)錯誤,程序跳轉(zhuǎn)到捕獲錯誤的位置,所以“trace("聲音停止了");”這行代碼沒有被執(zhí)行。提醒:一個try語句可以帶多個catch語句,以便捕獲到不同的錯誤,作不同的解決。finally語句是可選的。初學(xué)者易犯的編程錯誤把邏輯運算符“==”錯寫成賦值運算符“=”大小寫錯誤對象途徑?jīng)]有對的指定Flash的總體框架是一個樹型結(jié)構(gòu),而代碼又分散在這個結(jié)構(gòu)的各個分支。假如沒有指定對的的途徑,當(dāng)然無法得到對的的結(jié)果。有兩種方法指定途徑:相對途徑和絕對途徑。類名與類實例名混淆我們得分清楚類名和類實例名的區(qū)別。類是面向?qū)ο笳Z言構(gòu)建軟件的基本構(gòu)件,而實例,則是類在程序中的副本??梢岳斫鉃轭愂菍嵗哪0澹鴮嵗穷惖谋憩F(xiàn)形式。一個類可以有多個實例,而一個實例只能屬于一個類。庫中的元件和場景中的剪輯就是類與類實例的典型代表。在程序中,只能通過類實例名來引用某個具體的實例,而不是類名。例如庫中有一個名為“boy”的元件,將其拖到場景中(即創(chuàng)建這個類的實例),在屬性欄中設(shè)立實例名稱為“boy1”。那么控制這個剪輯停止播放的代碼應(yīng)為:boy1.stop();混淆數(shù)字“+”運算與字符串“+”運算數(shù)字“+”運算返回兩個數(shù)字相加的結(jié)果,而字符串“+”運算返回兩個字符串連接在一起的字符串。當(dāng)“+”號兩邊都是數(shù)字的時候,按數(shù)字加法運算,當(dāng)“+”號兩邊有一邊是字符串的時候,按字符串連接解決。但是問題的關(guān)鍵是假如沒有強行指定數(shù)據(jù)的類型,那么ActionScript有也許將數(shù)字類型當(dāng)字符串解決,從而犯錯。例如程序中有三個文本框,txt1,txt2,txtResult,和三個變量num1,num2和sum。我們希望用戶輸入在txt1中txt2輸入數(shù)字后點擊“計算”按鈕,將兩個數(shù)相加的結(jié)果存儲在sum中并顯示。我們很自然地想到用下面的表達式:num1=txt1.text;num2=txt2.text;sum=num1+num2;txtResult.text=sum;但是相加的結(jié)果卻令人吃驚。假如5和7,那么計算的結(jié)果顯示為12,這還算正常,但是當(dāng)一個文本框輸入3e-2(科學(xué)計數(shù)法,表達0.03)另一個輸入3時,計算的結(jié)果顯示為“3e-23”!為什么會出現(xiàn)這種結(jié)果呢?由于ActionScript將這兩個變量當(dāng)作字符串相加了!所以,在參與“+”例如上面數(shù)字相加的代碼,應(yīng)當(dāng)改寫成:sum=Number(num1)+Number(num2);某些字符辨認錯誤有些字符看上去非常像,例如字母l、g、o與數(shù)字1、9、0;把中文輸入法的全角標(biāo)號當(dāng)作英文的半角標(biāo)號而犯錯,如“(”、“)”、“,”、“;”,被寫成了“(”、“)”、“,”、“;”,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國女身模特行業(yè)市場運營模式及未來發(fā)展動向預(yù)測報告
- 2024-2030年中國地芬諾酯資金申請報告
- 2024年標(biāo)準(zhǔn)入職合同模板專業(yè)版版
- 2024年新建住宅購買意向協(xié)議
- 2024年城市綜合體精裝修商鋪合同2篇
- 眉山藥科職業(yè)學(xué)院《插畫設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年特許加盟合同:知名服裝品牌加盟經(jīng)營詳細條款
- 珠海城市職業(yè)技術(shù)學(xué)院實訓(xùn)室管理員工作職責(zé)
- 2024年版權(quán)許可使用合同(含作品名稱、許可范圍、使用期限等)
- 2024年汽車噴漆行業(yè)人才培養(yǎng)與輸送合同3篇
- 英語:初升高八種時態(tài)復(fù)習(xí)全解課件
- 糧油廠安全現(xiàn)狀評價報告
- 有機肥供貨及售后服務(wù)方案(投標(biāo)專用)
- 走近湖湘紅色人物知到章節(jié)答案智慧樹2023年湖南工商大學(xué)
- 普通化學(xué)習(xí)題庫
- 穿孔機操作規(guī)程
- 危機公關(guān)處理技巧
- 10、特種作業(yè)人員管理臺賬
- 機械基礎(chǔ)考試題庫及參考答案
- GB/T 70.1-2008內(nèi)六角圓柱頭螺釘
- 第一章數(shù)學(xué)的萌芽
評論
0/150
提交評論