版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
Flash編程基礎(言簡意賅適合新人沒有基礎也能看懂啊)教學提要ActionScript代碼的輸入與編輯語法與結構錯誤與調(diào)試重點與難點 重點是語法與結構,視課堂講授的進度安排教學內(nèi)容。由于安排的內(nèi)容較多,若課堂上無法全部完成,則改為回去自學。教學內(nèi)容:ActionScript代碼的輸入與編輯Flash是一個集美工、動畫與編程于一體的集成開發(fā)環(huán)境,故而其編程方式與其它純程序開發(fā)的編程方式有所不同。Flash自誕生之日起,就是以美工、動畫為主,以程序為輔的應用框架。我們可以理解為,F(xiàn)lash的總體結構就是一個影片剪輯(MovieClip),而幾乎所有的多媒體內(nèi)容都是掛在這個影片剪輯中的某個分支之上,包括腳本(代碼),形成一個樹形結構。自ActionScript3.0起,這個框架被規(guī)范化為顯示對象層次結構。一個典型的Flash作品的結構如下圖所示:典型的Flash作品的結構這種以動畫為主,代碼為輔的程序框架的好處是顯而易見的,因為游戲開發(fā)的許多工作與畫面設計打交道,我們利用對象層次結構,在直觀的環(huán)境下創(chuàng)作幾乎整個游戲!腳本的從屬地位的好處顯而易見,而其壞處也越來越被人們認識,就是對于其他程序開發(fā)人員來說,F(xiàn)lash的腳本有些莫名其妙,要想開發(fā)Flash程序,就必須先了解Flash的顯示對象層次結構,動畫,時間軸等原本與編程無多大聯(lián)系的知識。目前,F(xiàn)lash界面設計與代碼設計的分離成了趨勢,例如通過flex等提供一個完全適合程序員的開發(fā)環(huán)境。由于游戲類型的應用,界面與程序結合非常緊密,所以還是采用原有的框架,在單獨的Flash開發(fā)環(huán)境中完成所有的工作。雖然Actionscript代碼可以被掛在Flash中的許多分支上,但查看和編輯腳本卻十分方便,因為所有的代碼都在動作面板(腳本編輯器)中輸入和編輯,只要用鼠標點擊相應的位置或者對象,就會顯示這個位置或?qū)ο笏杏玫拇a。打開一個Flash文檔,按F9鍵,或者點擊【窗口】|【動作】命令,即可打開動作面板。動作面板如下圖所示:動作面板由于接下來要經(jīng)常和動作面板打交道,所以這里對動作面板進行較為詳細的介紹。腳本版本選擇:點擊下拉按鈕彈出ActionScript版本列表,選擇其中的一個,則語言元素列表的內(nèi)容會作相應的變化。需要注意的是這里修改的是語言元素列表的顯示內(nèi)容,但本文檔的ActionScript版本并不因此而被修改。ActionScript版本選擇語言元素列表:這是一個樹型結構的目錄,它列出了當前版本的語言元素、包以及索引。其中每個包里面有一個或多個類,每個類的屬性、方法和事件也都列在樹型結構中。如下圖所示:語言元素列表雙擊其中的一個條目,就可以在代碼窗口添加一行相應的代碼,然后用腳本助手或者直接手動進行必要的修改。當前代碼位置:當前代碼位置指出腳本編輯器中的代碼位于Flash文檔的何處。典型的代碼放置位置是主時間軸的幀上或者是影片剪輯中的幀上。如果是AS2或更早版本,代碼也可能是直接依附在影片剪輯或者按鈕上。做法是單擊一個剪輯或者按鈕,然后打開動作面板,輸入或者編輯其上的代碼。相信有過Flash8或以前版本使用經(jīng)驗的讀者對按鈕上的on函數(shù)再熟悉不過了。工具欄:動作面板的工具欄給出了針對Flash代碼的各種實用的按鈕,這些按鈕的說明如下圖所示:動作面板的工具欄及其解釋點擊按鈕將彈出與語言元素列表內(nèi)容一樣的菜單。點擊按鈕可以在編譯之前查找代碼的語法錯誤,這些錯誤會在輸出窗口中顯示。點擊可以將代碼依據(jù)其結構自動縮進對齊,如果代碼存在語法錯誤,則會提示語法錯誤,無法套用格式。從起右邊的按鈕,是FlashCS3新增的。這些按鈕和VisualStudio.NET的相關工具類似,估計是汲取其優(yōu)點而添加的。腳本助手:腳本助手開啟時,會在動作面板的上部顯示當前行代碼的結構信息,提供詳細的輔助信息。如圖所示,點擊for循環(huán)語句首行時腳本助手顯示的信息:腳本助手開啟腳本助手時無法自由修改腳本代碼,而且擠占了動作面板許多空間,所以它只適合初學者在不清楚程序結構或者擔心引入語法錯誤的情況下使用。當讀者對ActionScript的語法與結構具有一定的了解之后,應該取消腳本助手,而在代碼窗口中自由地編輯代碼。語法與結構本章節(jié)講解ActionScript的語法與結構,但并不按教科書的方式詳細講解。而是完全將FlashCS3看作是一種面向?qū)ο蟮木幊涕_發(fā)環(huán)境,以最簡練的代碼講解ActionScript的語法與結構。從簡練的代碼中引申出來的各種編程概念和知識面,則以列表的方式平鋪。這種方法可以使大家利用以前所學的其它語言的編程知識,快速過渡到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)試程序前保存文件是一個良好的習慣,因為誰也不能肯定剛剛編寫的腳本不會在調(diào)試過程中造成死機,若調(diào)試過程中出現(xiàn)死機或者意外退出Flash程序,那么沒有保存的內(nèi)容將會丟失。按Ctrl+S保存文件,然后選擇【控制】|【測試影片】,或者按Ctrl+Enter測試影片。這時會彈出兩個窗口,一個是Flash作品的窗口,因為剛才沒有建立任何可見的元素,所以這個窗口是空白的。還有一個是輸出窗口,當有trace輸出語句或者出現(xiàn)語法錯誤的時候就會自動彈出輸出窗口。本段程序測試時輸出窗口如下圖所示:本程序的輸出這段代碼包含以下知識點:代碼注釋的語法變量聲明與賦值的方法數(shù)據(jù)類型與默認值顯式類型指定及其意義程序結構語句基本數(shù)學運算trace語句介紹現(xiàn)在讓我們一行行地認識這些代碼://這是我第一次寫腳本這是一行代碼注釋,編譯器將忽略這行文字。注釋提高了代碼的可讀性。單行注釋由“//”開始,在代碼中呈灰色。如果需要多行注釋,則使用“/*”開始,用“*/”結束。一個典型的多行注釋如下所示:/*********************************Boat.as**輪船類**作者:肖剛**********************************/再看本例接下來的兩行代碼:varsum:Number;varcount:Number=5;這兩行代碼聲明兩個數(shù)值類型的變量sum和count。var是聲明變量的關鍵字,sum與count是變量名稱。Number指出變量數(shù)據(jù)類型為數(shù)值。第二行代碼聲明變量count的同時賦值一個初始值5。對于面向?qū)ο蟮某绦蛟O計語言來說,所有的數(shù)據(jù)類型都是對象,都是類。Flash的內(nèi)置類可以分為兩種,一種是基元類型,也被成為原始類型,它們一般用來存儲一些簡單的數(shù)據(jù),有的原始類型還具有一些針對所存儲的數(shù)據(jù)的屬性和方法。原始類型是構建復雜類的基本元素。另一種是復雜類,它們是由class關鍵字定義的類,可以認為是程序的構件,一般具有成套的屬性、方法和事件。原始類型的變量直接存儲數(shù)據(jù),而復雜類型的變量存儲的是類的引用。更多的關于類與對象的介紹,請參看“Flash的內(nèi)置類”以及“面向?qū)ο蟪绦蛟O計”章節(jié)。下表列出了ActionScript常用的原始類型,以及其簡要的說明,它們的用法都是大同小異的:數(shù)據(jù)類型說明BooleanBoolean數(shù)據(jù)類型包括兩個值:true和false。對于此類變量,其它任何值都是無效的。已經(jīng)聲明但尚未初始化的布爾變量的默認值是false。Number此數(shù)據(jù)類型可以表示整數(shù)、無符號整數(shù)和浮點數(shù)。若要存儲浮點數(shù),數(shù)字中應該包括一個小數(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ù)字和標點符號。字符串存儲為Unicode字符,使用UTF-16格式。對字符串值的操作返回字符串的一個新的實例。默認值如果沒有給變量賦值,變量將采用默認值。變量默認值列表如下:數(shù)據(jù)類型默認值Booleanfalseint0NumberNaNObjectundefinedStringnulluint0未聲明(與類型注釋*等效)undefined其它所有類(包括用戶定義的類)undefined顯式類型指定:雙引號“:”是類型(type)運算符,用于顯式指定變量的數(shù)據(jù)類型,與var關鍵字配合使用。它可以指定變量類型、函數(shù)返回類型或函數(shù)參數(shù)類型。在變量聲明或賦值中使用時,此運算符指定變量的類型;在函數(shù)聲明或定義中使用時,此運算符指定函數(shù)的返回類型;在函數(shù)定義中與函數(shù)參數(shù)一起使用時,此運算符指定該參數(shù)預期的變量類型。顯式指定數(shù)據(jù)類型不僅僅是一個良好的編程習慣,以便避免運行時出現(xiàn)不匹配情況;同時,對于Flash來說,腳本編輯器支持內(nèi)置類和基于這些類的變量的代碼提示,從而提高了編程的效率。如果需要為指定的變量的特定對象類型提供代碼提示就要嚴格指定變量類型,F(xiàn)lash根據(jù)變量的類型彈出合適的提示。代碼提示有兩種:彈出菜單提示和工具提示樣式的語法提示。彈出菜單提示如下圖所示:彈出菜單提示由于在之前顯式聲明了變量today為Date(日期)類型,所以當用鍵盤敲入“today”然后敲入“.”時,編輯器就會自動列出Date類型的變量的所有屬性和方法供我們選擇。這大大提高了編程的效率,也減少了由于記憶或者輸入錯誤而引起的程序錯誤。語法提示如下圖所示:語法提示語法提示在使用內(nèi)置類的成員函數(shù)時出現(xiàn),如上圖中我們使用了內(nèi)置類Date的getFullYear函數(shù)時,它會提示我們這個函數(shù)的參數(shù)為空,函數(shù)的返回值為Number類型。程序的基本結構:繼續(xù)看接下去的代碼:for(vari:Number=1;i<=count;i++){//內(nèi)部代碼略這是一個for循環(huá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)結束,執(zhí)行for循環(huán)以后的過程使用流程圖來表示的話,for循環(huán)結構的執(zhí)行如下圖所示:for循環(huán)結構雖然表達式1到表達式3可以是任意的單條語句,但是最常用的是它們分別表示循環(huán)變量賦初始值,循環(huán)條件,循環(huán)變量增值,例如本例的代碼。通常的計算機程序總是由若干條語句組成,從執(zhí)行方式上看,從第一條語句到最后一條語句完全按順序執(zhí)行,是簡單的順序結構;若在程序執(zhí)行過程當中,根據(jù)用戶的輸入或中間結果去執(zhí)行若干不同的任務則為選擇結構;如果在程序的某處,需要根據(jù)某項條件重復地執(zhí)行某項任務若干次或直到滿足或不滿足某條件為止,這就構成循環(huán)結構。順序結構、循環(huán)結構、選擇結構構成了結構化程序設計的三個基本單元,而眾多的基本單元構成龐大的程序。順序結構的流程圖如下所示:順序結構典型的選擇結構的流程圖如下所示:典型選擇結構按順序編寫的語句即為順序結構,所以沒有結構語句,而循環(huán)結構和選擇結構分別有多種語句結構,這些結構如下表所示:結構類型語句以及語法說明循環(huán)結構for(初始值;條件;增值){語句}先賦初始值,然后判斷條件,為真的情況下執(zhí)行語句,然后增值,完成一次循環(huán),接著重新判斷條件,直到條件為假。for(變量in對象){語句}順序遍歷對象的屬性或數(shù)組中的元素,并對每個屬性或元素執(zhí)行語句。while(條件){語句}當條件為真時執(zhí)行語句,然后判斷條件,如果為真,執(zhí)行語句,重新判斷條件,直到條件為假。do{語句}while(條件);先執(zhí)行語句,然后判斷條件,如果為真,繼續(xù)執(zhí)行語句。選擇結構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:語句]}多分支選擇結構。比較變量的值,如果為值1,則執(zhí)行語句1以及以后的語句,如果為值n,則執(zhí)行語句n以及以后的語句。如果只想執(zhí)行某一分支的語句n,則在語句n的最后應加break;語句。注:如果讀者沒有結構化程序設計的基礎,可以參考Flash的腳本幫助,打開Flash程序,選擇【幫助】|【Flash幫助】或者按F1就可以打開Flash的幫助面板。可以在目錄中尋找或者直接搜索來找到要學習的內(nèi)容。任何軟件,它的幫助文件就是最好的教材。或者讀者也可以找任何一本編程基礎的書籍,翻看之后即會明白。 更多的語句、關鍵字和指令,可以參考Flash的幫助文件,其位置如下圖所示:算術運算:再看本例接下來的一行代碼:sum=i*(i+1)/2;這行代碼的作用是將1~i的整數(shù)數(shù)字累加的結果放在sum變量中。它使用了多個算術運算符以及賦值運算符“=”。事實上,可以將這上行代碼用一個for循環(huán)來表達。sum=0;for(varj:Number=1;j<=i;j++){sum=sum+j;}但這明顯增加了代碼的復雜度。使用累加的公式:則代碼變簡單,執(zhí)行效率當然就提高了。游戲中常常需要使得運動滿足各種物理運動規(guī)律,這些規(guī)律都有公式可循,附錄中給出了一些常用的數(shù)學與物理現(xiàn)象公式以供參考。下表是ActionScript的算術運算符:運算符說明=賦值運算符?:條件運算符+相加-相減*相乘/相除%取余++自加1--自減1()小括號和代數(shù)運算一樣,程序中的運算符也具有優(yōu)先級,程序總是先執(zhí)行優(yōu)先級最高的運算。上表中,運算符的優(yōu)先級正好從低到高排列(有相同優(yōu)先級的,如加法“+”和減法“-”的優(yōu)先級是一樣的。事實上,程序中的算計運算的優(yōu)先級和中小學算術運算的優(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文件中不起作用,不會對最后結果造成影響。如果想在調(diào)試過程中暫時不輸出trace的結果,那么在【文件】|【發(fā)布設置】的Flash頁中勾選“省略trace動作”即可。如下圖所示:trace輸出開關在接下來的例子中,我們還將多次使用到trace語句,用來查看程序執(zhí)行的中間結果以及最后結果。包括在游戲?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ù)學類Math的使用數(shù)據(jù)類型轉(zhuǎn)換編譯器的嚴謹模式與非嚴謹模式現(xiàn)在來解釋這些代碼,先看第一行代碼:varmyArray:Array=newArray(4);這里聲明了一個Array類型的變量myArray,并用new關鍵字創(chuàng)建這個Array對象的實例,初始化其長度為4。Array是一個用來表示一維數(shù)組的數(shù)據(jù)類型,它可以存儲任意類型的數(shù)據(jù)或?qū)ο?。?shù)組是游戲程序中頻繁使用到的一種數(shù)據(jù)類型。用變量名稱引用數(shù)組對象,訪問數(shù)組的每個元素則使用下標運算符“[]”,下標從0開始編號。假設數(shù)組元素存儲的是另一個數(shù)組,那么就構成了二維數(shù)組,以此類推。多維數(shù)組的的訪問采用多個下標運算符即可。Array是一個復雜對象,必須用new關鍵字創(chuàng)建它的實例,否則聲明的變量無法訪問,因為ActionScript要通過new關鍵字給復雜對象在內(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ù)結構,同時還提供了一些基于數(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ù)組的結尾,并返回該數(shù)組的新長度。reverse():Array倒轉(zhuǎn)數(shù)組的順序。shift():Object刪除數(shù)組中第一個元素,并返回該元素。slice(startIndex:int=0,endIndex:int=16777215):Array返回由原始數(shù)組中某一范圍的元素構成的新數(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)成員一般用于輔助此類相關的一些操作。例如Array.NUMERIC就是一個Array類的靜態(tài)屬性(也稱為常數(shù)),在對數(shù)進行排序的時候用來表示按數(shù)值大小的順序排序而不是字符串編碼的順序排序。提示:本書中有許多的知識列表,為了節(jié)約篇幅,這些列表一般都是經(jīng)過精簡,剔除了游戲程序中不用或者很少使用到的項。讀者若想了解這些被精簡的項,可以參考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); }}這段代碼的結構為嵌套的循環(huán)結構。第一層循環(huán)給myArray數(shù)組的每一個元素賦值一個新的數(shù)組,第二層循環(huán)為myArray數(shù)組的每個元素所表示的數(shù)組的每個元素賦隨機的初始值。這段代碼用流程圖表示如下:嵌套循環(huán)上圖中,內(nèi)部循環(huán)結構可以看作是一個簡單的表達式,它與其前一條語句組成順序結構,而這個順序結構又可以看作是一個簡單的表達式,而成為外部循環(huán)結構的內(nèi)嵌表達式。一個完整的程序,是有著大量的順序結構、選擇結構和循環(huán)結構嵌套、組合的的復合體。熟練使用結構化程序設計思想是編寫復雜程序的基礎。Math類:這段代碼還用到了Flash內(nèi)建的數(shù)學類Math的一個靜態(tài)方法:random(),它的作用是生成一個0~1之間的隨機小數(shù)。Math是Flash內(nèi)嵌的數(shù)學計算輔助類,開發(fā)游戲經(jīng)常要和這個類打交道。它是一個靜態(tài)類,包含一些靜態(tài)函數(shù)和靜態(tài)屬性,以提供常用的數(shù)學方法和數(shù)學常數(shù),在程序的任何地方都可以調(diào)用這些成員。例如表示圓周率π的常數(shù)為Math.PI。下面這行代碼計算面積為area的圓的半徑:r=Math.sqrt(area/Math.PI);下表列出了Math對象的部分常數(shù)。常數(shù)說明E代表自然對數(shù)的底的數(shù)學常數(shù),表示為e。LN10代表10的自然對數(shù)的數(shù)學常數(shù),其近似值為2.302585092994046。LN2代表2的自然對數(shù)的數(shù)學常數(shù),其近似值為0.6931471805599453。PI代表一個圓的周長與其直徑的比值的數(shù)學常數(shù),其近似值為3.141592653589793。SQRT1_2代表1/2的平方根的數(shù)學常數(shù),其近似值為0.7071067811865476。SQRT2代表2的平方根的數(shù)學常數(shù),其近似值為1.4142135623730951。Math還包含了一些數(shù)學函數(shù)。在游戲編程中將常常用到這些方法。下表列出了Math對象的部分數(shù)學函數(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)換的目標類型是復雜類,則被轉(zhuǎn)換對象應該是相關類型,相關類型指具有繼承關系的類型。所有的復雜類都繼承自Object類,所以所有復雜類都可以轉(zhuǎn)換為Object類。MovieClip類繼承自Sprite類,所以MovieClip類可以轉(zhuǎn)換成Sprite類,但是Sprite類不能轉(zhuǎn)換成MovieClip類,因為MovieClip類不是Sprite類的相關類型。Date類與MovieClip類之間互不繼承,所以它們之間不能相互轉(zhuǎn)換。在類型轉(zhuǎn)換中如果出現(xiàn)類型不匹配,則會出現(xiàn)錯誤。如果編譯器為嚴謹模式,則在編譯的時候就會彈出編譯錯誤,程序無法編譯完成,但是如果是標準模式,則會在程序運行到類型匹配錯誤的時候才彈出錯誤。當程序比較龐大時,越早發(fā)現(xiàn)錯誤越好,所以程序員都傾向于使用嚴謹模式。修改嚴謹模式的方法為:選擇【文件】|【發(fā)布設置】,然后選擇“Flash”標簽,在ActionScript版本下來框中選擇“ActionScript3.0”,然后點擊旁邊的“設置”按鈕,彈出“ActionScript3.0設置”嚴謹模式設置勾選“嚴謹模式”即可。新建的AS3文檔默認使用嚴謹模式,但AS2無嚴謹模式的概念,如果您使用的是由AS2文檔轉(zhuǎn)換過來的AS3文檔,則默認使用非嚴謹模式。另外,嚴謹模式還要求變量都要先聲明才能使用,如果在發(fā)布設置中取消了嚴謹模式,則Flash可以不顯式聲明變量(即不使用var關鍵字聲明變量)。如varcount:Number=5;可以寫成count=5;兩者的效果是一樣的,F(xiàn)lash在第一次使用這個變量的時候自動定義這個變量,并且根據(jù)所賦的值的類型確定變量的數(shù)據(jù)類型。但有經(jīng)驗的程序員都明白,先聲明后使用的嚴謹編程習慣,對減少編程錯誤、維護復雜程序等方面是非常有意義的做法,目前絕大多數(shù)編程語言都逐漸摒棄了非嚴謹模式,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測試影片。會得到如下的輸出結果:找到一個能被7整除并且二進制數(shù)的第四位是0第五位是1的數(shù)字:693總共循環(huán)了"5"次代碼說明:這段代碼的執(zhí)行過程是先隨機生成一個1~1000的整數(shù),然后判斷它是否滿足給出的條件,如果不是,那么重新生成一個隨機數(shù),重新判斷,直到找到一個滿足條件的數(shù)字,最后輸出這個數(shù)字以及循環(huán)的次數(shù)。這段代碼包含以下知識點:自定義函數(shù)邏輯運算符復合邏輯關系關系運算符位運算符轉(zhuǎn)義字符現(xiàn)在來解釋一下其中的一些關鍵代碼:testNumber=Math.round(Math.random()*1000);這里再次使用了Math對象的兩個方法,用來產(chǎn)生一個1000以內(nèi)的隨機整數(shù)。回到示例代碼,看看下面這行代碼:while(!correctNumber(testNumber));這是dowhile循環(huán)結構中的條件部分。它調(diào)用了一個自定義函數(shù)correctNumber(),它有一個數(shù)值類型的參數(shù),當參數(shù)不是目標數(shù)值,則函數(shù)返回值為false時,由于進行了非運算(!),條件變成true,程序進入下一次循環(huán),即繼續(xù)執(zhí)行do語句后面的代碼,直到當參數(shù)就是目標數(shù)值,函數(shù)返回值為true,進行非運算之后變成false,不滿足循環(huán)條件,才跳出循環(huán)。自定義函數(shù):函數(shù)correctNumber()實現(xiàn)了是否是所要數(shù)字的判斷,是這段程序的重要組成部分。使用函數(shù)可以提高代碼的可讀性和可維護性,一般在如下情況下使用函數(shù):代碼的輸入和輸出比較簡單而中間過程比較復雜。使用函數(shù)使得在直觀上把實現(xiàn)的細節(jié)隱藏,提高了代碼的可讀性。在多個地方都要使用到相同的代碼,或者只有參數(shù)不同的代碼。就是說這段代碼是為了完成某個常用的任務。例如在一個拼圖游戲里面,點擊任意一個方塊都會執(zhí)行相應的移動(或者不移動)方塊的操作。初學者往往習慣于把相關程序放在每個方塊對象上。這造成代碼的大量冗余,可維護性差。而聰明的方法是將相應的操作寫成一個函數(shù),然后通過對象的事件處理函數(shù)調(diào)用這個函數(shù),并將被點擊對象的標識符(自定義)屬性作為這個函數(shù)的參數(shù)。某一大段代碼是為了完成某個單一的任務。這同樣是為了提到代碼的可讀性。經(jīng)驗表明,每個程序塊在30自然行以內(nèi)比較方便維護。也就是說,如果你有段代碼超過30行,那么應該考慮是否要使用函數(shù)切分這個程序塊了。說了這么多,現(xiàn)在來看看如何實現(xiàn)自定義函數(shù)吧!自定義函數(shù)的語法如下:function函數(shù)名(參數(shù)列表)[:返回類型]{函數(shù)內(nèi)部代碼[return返回值]}注:方括號表示其為語法結構中的可選項。自定義函數(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ù)+操作的結構。這樣的函數(shù)結構與類(Class)已經(jīng)很接近了。再繼續(xù)看這行代碼:if(para1%7==0&&(para1>>3)%4==2){邏輯運算符:&&是一個邏輯運算符。表示邏輯關系“與”,只有&&兩邊的表達式都為true,結果才為true。ActionScript提供三種邏輯運算符:運算符執(zhí)行的運算&&(AND)邏輯"與"||(OR)邏輯"或"!(NOT)邏輯"非"復合邏輯關系:這是一個if條件結構的一部分,括號內(nèi)部是一個Boolean類型值。它可以由多個邏輯值通過邏輯運算符組合而成,這個組合就是復合邏輯表達式,復合的結果要么是true,要么是false。下表是最簡的復合判斷表:運算符結果A&&B(與)若A、B皆為true則返回true,否則返回falseA||B(或)只要A、B中有一個為true,就返回true,否則返回false!A(非)若A為true,返回false,若A為false,返回true關系運算符:testNumber%7==0是一個關系判斷語句,先把testNumber對7求余數(shù),然后比較“==”號兩邊的數(shù)值,如果==號兩邊的值相等,則結果為true,否則結果為false?!?=”號是一個關系運算符。和其它編程語言一樣,ActionScript提供豐富的關系運算符。它們都有兩個操作數(shù),比較兩個操作數(shù)的值,然后依據(jù)比較的規(guī)則返回一個布爾值。ActionScript中的關系運算符列表如下:運算符執(zhí)行的運算<小于>大于<=小于或等于>=大于或等于==等于===如果兩者相等并且數(shù)據(jù)類型也相同時成立!===如果兩者不相等并且數(shù)據(jù)類型也不相同時成了instanceof如果運算符左邊的變量原型是右邊所示的類時成立此表中的所有運算符都具有相同的優(yōu)先級并且高于所有的邏輯運算符。位運算符:這段代碼中有一個位運算符“>>”,它的作用是直接將數(shù)值的二進制數(shù)按位向右移動3位,被移出的部分自動剔除而空缺的位自動補0。例如假設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)義字符指那些不能直接在字符串中表示出來的字符,因為這些字符被引作它用。例如雙引號“””,在程序中用來表示字符串的開始或者結束。如果某字符串本身含有雙引號,則必須使用轉(zhuǎn)義字符。轉(zhuǎn)義字符以反斜杠“\”標識,反斜杠的轉(zhuǎn)義字符為兩個反斜杠“\\”。下表是一些常用的轉(zhuǎn)義字符。轉(zhuǎn)義序列說明\b退格符。\f換頁符。\n換行符。\r回車。\t制表符。\unnnn任意的Unicode字符,字符代碼由十六進制數(shù)字nnnn指定。例如,\u263a是一個微笑字符。\xnn任意的ASCII字符,字符代碼由十六進制數(shù)字nn指定。\'單引號。\"雙引號。\\單反斜杠字符。自此我們已經(jīng)用三個簡短的代碼將ActionScript腳本語言的語法結構,以及數(shù)組的使用,內(nèi)置類的使用進行的大致的講解。由于本書的定位不是講解ActionScript的用法,而是用ActionScript開發(fā)游戲,所以僅對這些基礎知識點到為止。錯誤與調(diào)試程序錯誤有三種,一種是語法錯誤,編譯時提示編譯錯誤并列出發(fā)現(xiàn)錯誤所在位置。一種是運行時錯誤,編譯通過了,但是在程序運行的時候出現(xiàn)了錯誤。還有一種是邏輯錯誤,就是程序不會拋出任何錯誤,但是無法得到“應有”的結果。語法錯誤與處理所有的語法錯誤都在點擊語法檢查或者按Ctrl+Enter編譯時在輸出窗口中報錯,只有沒有語法錯誤的代碼才能通過編譯器編譯。先看看語法錯誤的例子,新建Flash文檔,輸入以下代碼:vartoday:Date=newDate();trace("今天是:");trace(today.getFullYear()+"年+(today.getMonth()+1)+"月"+today.getDate()+"日");按Ctrrl+Enter測試影片,會看到輸出窗口輸出兩個編譯錯誤:語法錯誤雙擊其中的一條錯誤,即可跳轉(zhuǎn)到發(fā)現(xiàn)錯誤所在的代碼行。錯誤描述則給出了關于錯誤的詳細說明,根據(jù)錯誤描述可以比較容易就找到錯誤的原因所在。需要注意的是,錯誤提示給出的錯誤位置和錯誤描述并不一定準確無誤。因為編譯器只有按語法規(guī)則在代碼發(fā)現(xiàn)語法錯誤的時候才報錯,但此時可能已經(jīng)過了實際錯誤所在,或者是由其它錯誤連帶引起的語法錯誤。如上面的例子,實際錯誤是在“年”字后面少了一個雙引號“””。但是程序執(zhí)行到這個位置的時候并不會發(fā)現(xiàn)錯誤,因為編譯器把“年+(today.getMonth()+1)+”看成是一個字符串,直到“月”字才發(fā)現(xiàn)語法錯誤。編譯器認為“月”是一個變量,而它與前面的字符串之間缺少了連接符。同時編譯器還發(fā)現(xiàn)了連帶引起的語法錯誤:在該語句結尾字符串沒有結束。事實上并不一定要在編譯的時候才能檢測語法錯誤。一種簡單的方法是看代碼的顏色。ActionScript代碼帶有某些色彩,以便區(qū)分各種類型的標識符。默認情況下,關鍵字是藍色,字符串是綠色,注釋是灰色,函數(shù)與變量是黑色。如果發(fā)現(xiàn)非預期的顏色,就可以確認代碼中存在語法錯誤。例如本例的代碼在動作面板中的顏色為:代碼的顏色還有一個方法是點擊動作面板上的語法檢查按鈕。如果有錯誤,則會彈出輸出窗口并顯示當前代碼的所有語法錯誤。提示編譯器錯誤避免運行時錯誤與邏輯錯誤排除運行時錯誤和邏輯錯誤是一件費時費力的工作。Flash游戲尤其如此,由于FlashPlayer往往以嵌入在其它軟件中的形式存在,為了不把錯誤傳遞給它的“載體”,F(xiàn)lashPlayer將幾乎所有的錯誤都“藏”了起來,甚至在調(diào)試時也不提示錯誤。隱藏錯誤增強了程序執(zhí)行時的穩(wěn)定性,但卻給開發(fā)人員排除錯誤留下不少的困難。所幸的是3.0已經(jīng)采取了積極的措施,引入了成套的錯誤處理機制,大大降低了除錯的難度。在講解如何除錯之前,應該首先考慮如何減少錯誤。養(yǎng)成良好的編程習慣是必要的。以下是一些建議:采用一致的命名規(guī)則附錄中給出了ActionScript程序員共同遵循的一組命名規(guī)則,讀者最好也遵循這樣的命名規(guī)則。多添加注釋如果沒有注釋,即使是自己寫的程序,時間久了閱讀起來也存在困難。修改起來就更加麻煩,更加容易引入錯誤。應用軟件工程的思想,做到高內(nèi)聚低耦合高內(nèi)聚低耦合是軟件設計的一個基本原則,說的是在程序的各個模塊中,盡量讓每個模塊獨立,同時相關的處理盡量在單個模塊中完成。這樣能提降低各模塊的之間的聯(lián)系,減少“牽一發(fā)而動全身”的幾率,提高開發(fā)效率,降低升級維護成本,也便于進行單元測試,提高軟件質(zhì)量。即使小到一個函數(shù),也應該遵照這個原則。在程序中采用合適的錯誤處理機制雖然沒有錯誤處理機制程序一般能順利運行,但程序不會總是按理想的方式運行。例如加載外部文件,如果文件不存在了,自然程序就會不正常。網(wǎng)絡通信、用戶操作、文件讀寫、條件不足、設備忙是常見的出錯地方,在這些地方添加錯誤捕捉機制可以捕獲這些錯誤,然后作相應的處理。采用了錯誤處理機制的程序能夠適應更加“惡劣”的使用環(huán)境,使得程序更加健壯。ActionScript2.0可以使用Error類,使用try-catch-finally機制捕捉錯誤,或者重載錯誤事件。Error類是遵循ECMAScript規(guī)范的核心類,ActionScript3.0中仍然可以使用,也可以使用偵聽器捕獲錯誤事件,關于偵聽器的使用請參看相關的章節(jié)。同時它還采用flash.errors類包中的類捕捉更確切的錯誤。提示:在錯誤處理方面,ActionScript3.0比ActionScript2.0有了比較大的改進。它提供了更加貼切的語法錯誤消息、更多的警告、拋出更多的錯誤以及擴展的捕獲錯誤的體系結構。調(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("聲音流關閉出現(xiàn)錯誤:\r"+error.toString()); trace("更多的錯誤處理代碼");}finally{ trace("不管是否捕捉到錯誤,這段代碼都被執(zhí)行"); //一般在此處做釋放內(nèi)存操作}首先用import語句導入FlashPlayer的兩個API,然后創(chuàng)建一個API對象Sound的實例music,接著嘗試關閉music。由于music實例還加載聲音流,所以使用close方法的時候出錯,F(xiàn)lash拋出IOError,被try-catch結構捕獲,程序跳入catch部分進行一些處理。按Ctrl+Enter測試影片,得到如下的輸出:聲音流關閉出現(xiàn)錯誤:Error:Error#2029:此URLStream對象中沒有已打開的流。更多的錯誤處理代碼不管是否捕捉到錯誤,這段代碼都被執(zhí)行從結果中可以看出,當music實例close的時候觸發(fā)錯誤,程序跳轉(zhuǎn)到捕獲錯誤的位置,所以“trace("聲音停止了");”這行代碼沒有被執(zhí)行。提示:一個try語句可以帶多個catch語句,以便捕獲到不同的錯誤,作不同的處理。finally語句是可選的。初學者易犯的編程錯誤把邏輯運算符“==”錯寫成賦值運算符“=”大小寫錯誤對象路徑?jīng)]有正確指定Flash的總體框架是一個樹型結構,而代碼又分散在這個結構的各個分支。如果沒有指定正確的路徑,當然無法得到正確的結果。有兩種方法指定路徑:相對路徑和絕對路徑。類名與類實例名混淆我們得分清楚類名和類實例名的區(qū)別。類是面向?qū)ο笳Z言構建軟件的基本構件,而實例,則是類在程序中的副本??梢岳斫鉃轭愂菍嵗哪0?,而實例是類的表現(xiàn)形式。一個類可以有多個實例,而一個實例只能屬于一個類。庫中的元件和場景中的剪輯就是類與類實例的典型代表。在程序中,只能通過類實例名來引用某個具體的實例,而不是類名。例如庫中有一個名為“boy”的元件,將其拖到場景中(即創(chuàng)建這個類的實例),在屬性欄中設置實例名稱為“boy1”。那么控制這個剪輯停止播放的代碼應為:boy1.stop();混淆數(shù)字“+”運算與字符串“+”運算數(shù)字“+”運算返回兩個數(shù)字相加的結果,而字符串“+”運算返回兩個字符串連接在一起的字符串。當“+”號兩邊都是數(shù)字的時候,按數(shù)字加法運算,當“+”號兩邊有一邊是字符串的時候,按字符串連接處理。但是問題的關鍵是如果沒有強行指定數(shù)據(jù)的類型,那么ActionScript有可能將數(shù)字類型當字符串處理,從而出錯。例如程序中有三個文本框,txt1,txt2,txtResult,和三個變量num1,num2和sum。我們希望用戶輸入在txt1中txt2輸入數(shù)字后點擊“計算”按鈕,將兩個數(shù)相加的結果存儲在sum中并顯示。我們很自然地想到用下面的表達式:num1=txt1.text;num2=txt2.text;sum=num1+num2;txtResult.text=sum;但是相加的結果卻令人吃驚。假如5和7,那么計算的結果顯示為12,這還算正常,但是當一個文本框輸入3e-2(科學計數(shù)法,表示0.03)另一個輸入3時,計算的結果顯示為“3e-23”!為什么會出現(xiàn)這種結果呢?因為ActionScript將這兩個變量當作字符串相加了!所以,在參與“+”例如上面數(shù)字相加的代碼,應該改寫成:sum=Number(num1)+Number(num2);某些字符識別錯誤有些字符看上去非常像,例如字母l、g、o與數(shù)字1、9、0;把中文輸入法的全角標號當作英文的半角標號而出錯,如“(”、“)”、“,”、“;”,被寫成了“(”、“)”、“,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 旅游行業(yè)景點評級標準
- 手術中的電生理監(jiān)測
- 自制禮物課件教學課件
- 河南省2024九年級語文上冊第二單元8就英法聯(lián)軍遠征中國致巴特勒上尉的信課件新人教版
- 慢病調(diào)理中心介紹
- 消防演練總結講評
- 農(nóng)業(yè)物聯(lián)網(wǎng)導論
- 感恩課件英文教學課件
- 玉米灰斑病病害循環(huán)
- 氣管切開燒傷病人的護理
- TCECA-G 0171-2022 零碳工廠評價規(guī)范
- Q∕GDW 10278-2021 變電站接地網(wǎng)技術規(guī)范
- 光與色的世界(課件)
- 馬凳筋施工專項方案(12頁)
- 李鐵安:高品質(zhì)課堂的塑造
- 巖石力學基本教程 教學PPT 第6章 地應力
- 2019年航測遙感試卷及答案82分(錯題給出參考答案)
- 義務教育《化學》課程標準(2022年版)
- 縱膈腫瘤ppt模板
- 鋼結構焊接施工記錄含內(nèi)容
- 治安保衛(wèi)重點要害部位審定表
評論
0/150
提交評論