版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第1章動畫編程簡介Flash AS 3.0 Flash ActionScript 3.0概況 Adobe Flash Professional IDE Flash中設(shè)計與AS代碼的集成1.1 動畫編程語言AS 3.0 Flash是目前最為熱門的二維交互式矢量動畫制作軟件。 ActionScript(AS)是內(nèi)置于Flash的編程語言,它在 Flash內(nèi)容和應(yīng)用程序中實現(xiàn)交互性、數(shù)據(jù)處理以及其他許多功能。 ActionScript 在 ActionScript 虛擬機(jī) (AVM) 中執(zhí)行,運行時AVM包含在 Flash Player中。ActionScript 代碼通常由編譯器轉(zhuǎn)換為字節(jié)代碼格式
2、。字節(jié)代碼是一種由計算機(jī)編寫和識別的編程語言。在Adobe Flash Professional 中內(nèi)置有編譯器。字節(jié)代碼嵌入在 Flash Player 執(zhí)行的 SWF 文件中。 ActionScript 3.0 已成了真正的面向?qū)ο蟮木幊陶Z言,提供了可靠的編程模型,方便創(chuàng)建擁有大型數(shù)據(jù)集和面向?qū)ο蟮目芍赜么a庫的高度復(fù)雜應(yīng)用程序。 ActionScript 3.0 中的新功能: (1) 核心語言功能; (2) API 功能. 1.2 Flash IDE簡介動作面板(2) 輸出面板(3) 編譯器錯誤面板(4) 腳本窗口1.3 案例圖形自動繪制程序1.3.1 案例任務(wù)描述 本案例是一個不需要動
3、畫設(shè)計的腳本范例,程序代碼以外部獨立的as文件存在,它實現(xiàn)的功能是由程序運行時自動地完成一個箭頭圖形的繪制。1.3.2 操作流程 程序功能演示; 學(xué)生動手練習(xí)。1.3.3 案例小結(jié) 在本案例中,使用獨立存在的Arrow.as腳本文件,被另一個設(shè)計內(nèi)容空白的arrow.fla設(shè)計文件,通過文檔類的方式調(diào)用,集成在一起,形成最后的Flash作品。 Arrow.as文件的類代碼可以被重復(fù)使用,任何其它影片作品文檔都可調(diào)用它,原因在于它是獨立存在的。1.4 案例補間動畫播放程序1.4.1 案例任務(wù)描述 本案例首先設(shè)計一段常規(guī)的形狀補間動畫,然后添加到動畫中的交互行為,包括兩個可以單擊的按鈕:一個用于啟
4、動動畫,另一個用于導(dǎo)航到單獨的 URL(某個網(wǎng)站,比如中國水利水電出版社)。交互行為的動作代碼為存放在時間軸上的幀代碼。 1.4.2 操作流程 程序功能演示; 學(xué)生動手練習(xí)。1.4.3 案例小結(jié) 本案例將各段 ActionScript代碼合并后形成一個完整的應(yīng)用程序。該動畫片段是一個如何利用現(xiàn)有線性動畫以及添加某些交互式元素的示例。 程序代碼全部放置在時間軸的幀上,不存在或沒有用到外部as文件中的代碼。1.5 案例Hello World程序1.5.1 案例任務(wù)描述 本案例ActionScript 應(yīng)用程序是一個標(biāo)準(zhǔn)“Hello World” 應(yīng)用程序,設(shè)計要求較為簡單:此應(yīng)用程序名為 Hell
5、oWorld;將顯示一個包含“Hello World!” 字樣的文本字段;應(yīng)用程序主要實現(xiàn)一個名為 Greeter 的面向?qū)ο蟮念?,存在于外部as文件中。這種設(shè)計允許在 Flash Professional中使用該類。1.5.2 操作流程 程序功能演示; 學(xué)生動手練習(xí)。1.5.3 案例小結(jié) 本案例是較為典型的Flash動畫作品的表現(xiàn)形式,ActionScript腳本程序和作品設(shè)計相結(jié)合,有一定的交互性,并體現(xiàn)了一種在 Flash Professional 中使用外部 ActionScript 3.0 類文件的簡單模式。 整個程序的代碼有一部分放置在時間軸的幀上,有一部分以外部獨立as文件的形式
6、存,將二者相結(jié)合,實現(xiàn)最后的程序。感謝您的關(guān)注!第2章AS3.0基本語法Flash AS 3.0 常量和變量 數(shù)據(jù)類型及相互轉(zhuǎn)換 語言要素及語法規(guī)則 運算符與表達(dá)式 數(shù)組及字符串 程序結(jié)構(gòu)及函數(shù)2.1 常量與變量2.1.1 常量 常量指的是在程序運行過程中始終保持不變的數(shù)據(jù)。 表示常量的方法有兩種:字面常量和常量聲明。 字面常量指在程序中直接書寫數(shù)據(jù)的內(nèi)容,如trace(“hello world!”),其中雙引號括起的字符串即為字面常量。再比如,y=x+3,這里的數(shù)值3為一個字面常量。 下面列出了可以直接包含在代碼中的各種字面值類型: 數(shù)字(包括int和uint),如42、-100和93.5;
7、 布爾值,即true和false; 使用單引號或雙引號的字符串,其形式為“Leorm ipsum”; 特珠類型的空值,即null和undefined; 使用方括號的數(shù)組字面值,如“Monday”,”Wednesday”,”Friday”; 使用大括號語法定義的通用對象,如name:”Alita”,likeSpaghetti:true。 常量聲明指的是使用const定義一個標(biāo)識符,該標(biāo)識符即為常量名,比如: “const CONNAME:int”,其中CONNAME為常量名。 一般在定義時,需進(jìn)行常量的初始化操作,即給出其值。如“const CONNAME:int=5”,初始化后在程序中不能再更
8、改其值。一般約定,常量名都用大寫字母表示,以區(qū)別其它標(biāo)識符。2.1.2 變量 變量可用來存儲程序中使用的值。在AS 3.0中聲明變量的格式如下: var 變量名:數(shù)據(jù)類型; var 變量名:數(shù)據(jù)類型 = 值; 變量命名即標(biāo)識符,AS3.0將標(biāo)識符分為編程用標(biāo)識符和設(shè)計用標(biāo)識符。編程用標(biāo)識符可分為常量、變量、函數(shù)名、對象名等;設(shè)計用標(biāo)識符分為實例名、連接類名。通用命名規(guī)則包括26個英文字母、數(shù)字、美元符號($)、下劃線(_),而且第一個字符不能是數(shù)字。 (一) 變量的命名規(guī)則 在編程實踐中,變量命名應(yīng)遵循以下規(guī)則: 盡量使用有含義的英文單詞作為變量名。 變量名采用駱駝命名法,即混合使用大小寫,第
9、一個單詞的首字母小寫,第二個以后的單詞首字母大寫,其它均為小寫,如highLevelFlag變量。 變量命名符合最小長度最大信息量原則。 盡量避免變量名中出現(xiàn)數(shù)字編號。 (二) AS3.0中使用的保留字 AS3.0中定義的標(biāo)識符是區(qū)分大小寫的:如myname和myName是完全不同的兩個變量。另外,不能使用保留字,如教材中的表2-1、表2-2、表2-3所示的詞匯關(guān)鍵字。 (三) Flash Professional中的元件變量 在Flash Professional中,還有另外一種變量聲明方法。 在將一個影片剪輯元件、按鈕元件或文本字段放置在舞臺上時,可以在屬性檢查器中為它指定一個實例名稱。F
10、lash Professional在后臺創(chuàng)建與實例同名的變量??稍贏ctionScript 代碼中使用該名稱表示該舞臺項。 例如,假設(shè)舞臺上有一個影片剪輯元件,并為其指定了實例名稱rocketShip。只要在ActionScript代碼中使用變量rocketShip,實際上就是在操作該影片剪輯。 (四) 變量的作用域 變量的作用域是指可在其中通過詞匯引用來訪問變量的代碼區(qū)域。全局變量是指在代碼的所有區(qū)域中定義的變量,而局部變量是指僅在代碼的某個部分定義的變量。 在 ActionScript 3.0 中,始終為變量分配聲明它們的函數(shù)或類的作用域。全局變量是在任何函數(shù)或類定義的外部定義的變量。可以
11、通過在函數(shù)定義內(nèi)部聲明變量來將它聲明為局部變量??啥x局部變量的最小代碼區(qū)域就是函數(shù)定義。在函數(shù)內(nèi)部聲明的局部變量僅存在于該函數(shù)中。2.2 數(shù)據(jù)與數(shù)據(jù)類型 程序中的數(shù)據(jù)指的是用于數(shù)學(xué)計算的整數(shù)、小數(shù),用于文本存儲的字符串,用于邏輯運算的真假值等。數(shù)據(jù)類型可以確定程序中變量的種類以方便組成各種表達(dá)式。 2.2.1 數(shù)據(jù)類型 在 ActionScript中,可以將很多數(shù)據(jù)類型用作所創(chuàng)建的變量的數(shù)據(jù)類型。其中的某些數(shù)據(jù)類型可以看作是“簡單”或“基本”數(shù)據(jù)類型: string:一個文本值,例如,一個名稱或書中某一章的文字; numeric:對于 numeric 型數(shù)據(jù), ActionScript 3.
12、0 包含三種特定的數(shù)據(jù)類型: number:任何數(shù)值,包括有小數(shù)部分或沒有小數(shù)部分的值; int:一個整數(shù)(不帶小數(shù)部分的整數(shù)); uint:一個“無符號”整數(shù),即不能為負(fù)數(shù)的整數(shù)。 Boolean:一個 true 或 false 值,例如開關(guān)是否開啟或兩個值是否相等。 ActionScript 中定義的大部分?jǐn)?shù)據(jù)類型都可以被描述為復(fù)雜數(shù)據(jù)類型,因為它們表示組合在一起的一組值。例如,數(shù)據(jù)類型為 Date 的變量表示單個值,即時間中的某個片刻。然而,該日期值實際上表示為幾個值:年、月、日、時、分、秒等等,它們都是單獨的數(shù)字。 大部分內(nèi)置數(shù)據(jù)類型以及程序員定義的數(shù)據(jù)類型都是復(fù)雜數(shù)據(jù)類型。下面的是一
13、些復(fù)雜數(shù)據(jù)類型: MovieClip:影片剪輯元件。 TextField:動態(tài)文本字段或輸入文本字段。 SimpleButton:按鈕元件。 Date:有關(guān)時間中的某個片刻的信息(日期和時間)。 用作數(shù)據(jù)類型的同義詞的兩個概念是類和對象。 “類”僅僅是數(shù)據(jù)類型的定義,就像用于該數(shù)據(jù)類型的所有對象的模板,例如“所有 Example 數(shù)據(jù)類型的變量都擁有這些特性:A、B 和 C”。 “對象”僅僅是類的一個實際的實例;可將一個數(shù)據(jù)類型為 MovieClip 的變量描述為一個 MovieClip 對象。 下面幾條敘述雖然表達(dá)的方式不同,但意思是相同的:變量 myVariable 的數(shù)據(jù)類型是 Numb
14、er;變量 myVariable 是一個 Number 實例;變量 myVariable 是一個 Number 對象;變量 myVariable 是 Number 類的一個實例。 2.2.2 類型轉(zhuǎn)換(一) 隱式轉(zhuǎn)換 在運行時,隱式轉(zhuǎn)換會發(fā)生在許多上下文環(huán)境中: 在賦值語句中。 在將值作為函數(shù)的參數(shù)傳遞時。 在從函數(shù)中返回值時。 在使用某些運算符(如加法運算符 (+))的表達(dá)式中。(二) 顯式轉(zhuǎn)換 在嚴(yán)格模式下進(jìn)行編譯時,使用顯式轉(zhuǎn)換會非常有用,因為有時可能不希望因類型不匹配而生成編譯時錯誤。當(dāng)知道強制功能會在運行時正確轉(zhuǎn)換值時,可能就屬于這種情況。例如,在使用從表單接收的數(shù)據(jù)時,可能希望依賴
15、強制功能將某些字符串值轉(zhuǎn)換為數(shù)值。 var quantityField:String = 3; var quantity:int = int(quantityField);2.2.3 數(shù)組 一個數(shù)組中的所有元素都是同一數(shù)據(jù)類型的數(shù)據(jù)。AS3.0中的數(shù)組分為數(shù)字索引數(shù)組和字符串索引數(shù)組兩類。數(shù)組類Array是AS3.0中內(nèi)置的一個類,聲明數(shù)組的方法有幾種,比如:var myArray : Array = new Array(5); var myArray : Array = 1,2,3,4,5; 訪問數(shù)組中的元素使用方括號運算符,比如:trace(“myArray2”);方括號中標(biāo)明的是數(shù)組的下
16、標(biāo),為從0開始的整數(shù)。 字符串索引數(shù)組不使用數(shù)字作為元素下標(biāo),訪問這種數(shù)組中的元素時方括號內(nèi)需要一個字符串(其實是屬性)。本質(zhì)上,就是一個Object類型對象。比如,可以使用直接初始化對象的方式定義字符串索引數(shù)組:var monitorInfo:Object = type:”Flat Panel”,resolution:”1600*1200”;trace(monitorInfo“type”,monitorInfo“resolution”); var monitorInfo:Object = new Object();monitorInfo“aspect ratio” = “16:10”; 2.
17、3 運算符與表達(dá)式2.3.1 運算符與表達(dá)式 運算符是一種特殊的函數(shù),它們連同一個或多個操作數(shù)并返回相應(yīng)的值形成表達(dá)式。操作數(shù)是運算符用作輸入的值(通常為字面值、變量或其它表達(dá)式)。運算符可以是一元、二元或三元的。一元運算符用 1 個操作數(shù);二元運算符用 2 個操作數(shù);三元運算符用 3 個操作數(shù)。2.3.2 運算符的優(yōu)先級和結(jié)合律 運算符的優(yōu)先級和結(jié)合律決定了處理運算符的順序。 ActionScript 定義了一個默認(rèn)的運算符優(yōu)先級,可以使用小括號運算符 ()來改變它。分類組合運算符主要 x:y () f(x) new x.y xy : .后綴x+ x-一元+x -x + - ! delete
18、 typeof void乘性* / %加性+ -按位移位 關(guān)系 = as in instanceof is等于= != = !=按位AND、XOR、OR& |邏輯 AND、OR、NOT& | !條件?:賦值= *= /= %= += -= = = &= = |=逗號,2.3.3 主要運算符 主要運算符包括那些用來創(chuàng)建 Array 和 Object 字面值、對表達(dá)式進(jìn)行分組、調(diào)用函數(shù)、實例化類實例以及訪問屬性的運算符。 運算符執(zhí)行的運算初始化數(shù)組x:y初始化對象()對表達(dá)式進(jìn)行分組f(x)調(diào)用函數(shù)new調(diào)用構(gòu)造函數(shù)x.y xy訪問屬性初始化 XMLList 對象 (E4X)訪問屬性 (E4X):
19、限定名稱 (E4X).訪問子級 XML 元素 (E4X)2.3.4 幾個典型的一元運算符和關(guān)系運算符 一元運算符只有一個操作數(shù),這意味著它們在表達(dá)式中出現(xiàn)在操作數(shù)的前面。關(guān)系運算符涉及兩個操作數(shù),它比較兩個操作數(shù)的值,然后返回一個布爾值。運算符執(zhí)行的運算一元運算符delete刪除屬性typeof返回類型信息void返回未定義值關(guān)系運算符as檢查數(shù)據(jù)類型in檢查對象屬性instanceof檢查原型類is檢查數(shù)據(jù)類型2.4 案例類型轉(zhuǎn)換程序2.4.1 案例任務(wù)描述 本案例設(shè)計一個程序,完成數(shù)據(jù)類型的轉(zhuǎn)換演示,將數(shù)據(jù)類型從一種類型轉(zhuǎn)換為另一種類型,即從數(shù)組轉(zhuǎn)為列表、從字符串轉(zhuǎn)為數(shù)組、從數(shù)組轉(zhuǎn)為字符串
20、、從字符串轉(zhuǎn)為整數(shù)、從字符串轉(zhuǎn)為浮點數(shù)等。 2.4.2 操作流程 程序功能演示; 學(xué)生動手練習(xí)。2.4.3 案例小結(jié) 本案例通過上機(jī)運行,應(yīng)該對程序的變量有所認(rèn)識,ActionScript以變量的使用為基礎(chǔ),而變量從本質(zhì)上說就是程序運行過程中保存數(shù)據(jù)的容器。 每個變量都有各自的數(shù)據(jù)類型,數(shù)據(jù)類型定義了存儲在變量中的數(shù)據(jù)的類型。這種機(jī)制可以幫助編譯器和Flash Player捕獲代碼中的錯誤。在運算時,使用數(shù)據(jù)類型的顯示轉(zhuǎn)換有助于得到正確的運算結(jié)果。在傳統(tǒng)的程序語言中字符串和數(shù)組是真正的數(shù)據(jù)類型,而AS3.0中的String和Array是面向?qū)ο蟪绦蛘Z言中的類。2.5 程序結(jié)構(gòu)與函數(shù)2.5.1
21、條件語句 AS 3.0 提供了三個可用來控制程序流的基本條件語句。(一) if.else語句if (x 20) trace(x is 20); else trace(x is 20) trace(x is 20); else if (x 0) trace(x is negative); (三) switch語句var someDate:Date = new Date();var dayNum:uint = someDate.getDay();switch(dayNum) case 0: trace(Sunday); break; case 1: trace(Monday); break; ca
22、se 2: trace(Tuesday); break; case 3: trace(Wednesday); break; case 4: trace(Thursday); break; case 5: trace(Friday); break; case 6: trace(Saturday); break; default: trace(Out of range); break; 2.5.2 循環(huán)語句循環(huán)語句允許使用一系列值或變量來反復(fù)執(zhí)行一個特定的代碼塊。建議始終用大括號 () 括起代碼塊。AS 3.0 提供了五個可用來控制程序流的基本循環(huán)語句。(一) for語句var i:int;for
23、 (i = 0; i 5; i+) trace(i); (二) for.in語句var myObj:Object = x:20, y:30;for (var i:String in myObj) trace(i + : + myObji);(三) for each.in 語句var myObj:Object = x:20, y:30;for each (var num in myObj) trace(num);(四) while語句var i:int = 0;while (i 5) trace(i); i+;(五) do.while語句var i:int = 5;do trace(i); i+
24、; while (i 5); 2.5.3 函數(shù) 一般講,函數(shù)指在程序中可能重復(fù)使用的代碼塊。函數(shù)通過參數(shù)接收外部數(shù)據(jù),也可以返回一個值。(一) 函數(shù)定義及使用函數(shù)聲明的語法為:Function 函數(shù)名(參數(shù)列表):返回值類型 /函數(shù)的執(zhí)行代碼(函數(shù)體) 函數(shù)調(diào)用的語法為: 函數(shù)名(參數(shù)列表)(二) 函數(shù)作為對象 ActionScript 3.0 中的函數(shù)是對象。當(dāng)創(chuàng)建函數(shù)時,就是在創(chuàng)建對象,該對象不僅可以作為參數(shù)傳遞給另一個函數(shù),而且還可以有附加的屬性和方法。 作為參數(shù)傳遞給另一個函數(shù)的函數(shù)是按引用(而不是按值)傳遞的。在將某個函數(shù)作為參數(shù)傳遞時,只能使用標(biāo)識符,而不能使用在調(diào)用方法時所用的小
25、括號運算符。例如,下面的代碼將名為 clickListener() 的函數(shù)作為參數(shù)傳遞給 addEventListener() 方法: addEventListener(MouseEvent.CLICK, clickListener); (三) 函數(shù)作用域 函數(shù)的作用域不但決定了可以在程序中的什么位置調(diào)用函數(shù),而且還決定了函數(shù)可以訪問哪些定義。適用于變量標(biāo)識符的作用域規(guī)則同樣也適用于函數(shù)標(biāo)識符。在全局作用域中聲明的函數(shù)在整個代碼中都可用。 2.5.4 注釋(一) 單行注釋 在一行中的任意位置放置兩個斜杠來指定單行注釋。 / 這是注釋行,執(zhí)行時被計算機(jī)忽略.var age:Number = 10
26、; /給age變量初值10 (二) 多行注釋 多行注釋包括一個開始注釋標(biāo)記 (/*)、注釋內(nèi)容和一個結(jié)束注釋標(biāo)記 (*/)。 /*This is a long description explaining what a particularfunction is used for or explaining a section of code.In any case, the computer ignores these lines. */ 2.6 案例數(shù)組處理程序2.6.1 案例任務(wù)描述 本案例設(shè)計一個程序,實現(xiàn)如何創(chuàng)建數(shù)組、對數(shù)組中元素進(jìn)行排序,以及元素的增加和刪除等操作數(shù)組的基本功能。輔
27、助以操作界面,選中列表A中的元素,可以移動到列表B中去,反之亦然。列表A和列表A具有各自的排序操作按鈕,數(shù)組是列表A和列表B的操作數(shù)據(jù)。 2.6.2 操作流程 程序功能演示; 學(xué)生動手練習(xí)。2.6.3 案例小結(jié) 該案例使用AS3.0內(nèi)置的組件list的屬性dataProvider存儲數(shù)組數(shù)據(jù),通過list組件提供的方法完成數(shù)據(jù)的增加、刪除、排序等功能。 程序中使用了分支結(jié)構(gòu)、函數(shù)等AS3.0的語言要素。程序各個基本功能的實現(xiàn),是建立在以函數(shù)為基本單元,以程序分支、循環(huán)等語句體為函數(shù)組成要素的基礎(chǔ)上。2.7 案例求兩數(shù)的最小公倍數(shù)程序2.7.1 案例任務(wù)描述 本案例要求求出兩個整數(shù)的最大公約數(shù)和
28、最小公倍數(shù)。運行程序,輸入兩個整數(shù),點擊“計算”按鈕,則得到最大公約數(shù)和最小公倍數(shù),程序使用歐幾里德算法(輾轉(zhuǎn)相除法)求兩個數(shù)的最大公約數(shù),用兩個數(shù)的積除以最大公約數(shù),得最小公倍數(shù)。 2.7.2 操作流程 程序功能演示; 學(xué)生動手練習(xí)。2.7.3 案例小結(jié) 本案例通過定義類及函數(shù),完成通用的求解算法;而通過Flash界面設(shè)計及時間軸代碼,完成用戶輸入輸出,二者相結(jié)合實現(xiàn)了整個程序。 程序使用分支if語句,為程序添加決策制訂邏輯。因為不同的兩個數(shù),其展轉(zhuǎn)相除法使用次數(shù)不確定,因而選用了while循環(huán)語句。for和while循環(huán)可以幫助簡化重復(fù)的代碼操作,新增的for each in 語句更易于訪
29、問存儲在復(fù)雜對象中的屬性。感謝您的關(guān)注!第3章AS3.0中面向?qū)ο蟮木幊蘁lash AS 3.0類和對象包和命名空間AS3.0類的結(jié)構(gòu)常見內(nèi)置類數(shù)值處理和數(shù)學(xué)方法日期和時間3.1 類和對象 類是抽象的,對象是類的實例,是程序運行中參與實際操作的基本元素。類可視為某一類對象的模板或藍(lán)圖。 類定義中可以包括變量和常量以及方法,前者用于保存數(shù)據(jù)值稱為屬性,后者是封裝綁定到類行為的函數(shù)稱為方法。 在AS3.0中,MovieClip是一個類,它表示影片剪輯。放在Flash庫中的影片剪輯元件都是MovieClip類的子類,而顯示在舞臺上的影片剪輯實例則稱為影片剪輯對象。同樣地,文本框、按鈕、字符串等都有對
30、應(yīng)的類。 3.1.1 包和命名空間 類都是定義在包中的。包和命名空間是兩個相關(guān)的概念。使用包,可以通過有利于共享代碼并盡可能減少命名沖突的方式將多個類定義捆綁在一起。使用命名空間,可以控制標(biāo)識符(如屬性名和方法名)的可見性。 該代碼對應(yīng)的*.as腳本文件,存儲在samples文件夾下,并且samples文件夾與影片文件即flash文檔*.fla處于同一文件夾。如果類所屬的包對應(yīng)的*.as文件與*.fla在同一文件夾下,則包名省略,表示當(dāng)前是包。package samples public class SampleCode public var sampleGreeting:String; pu
31、blic function sampleFunction() trace(sampleGreeting + from sampleFunction(); 使用命名空間時,應(yīng)遵循以下三個基本步驟。 第一步,必須使用 namespace 關(guān)鍵字來定義命名空間。 例如,下面的代碼定義version1 命名空間: namespace version1; 第二步,在屬性或方法聲明中,使用命名空間(而非訪問控制說明符)來應(yīng)用命名空間。 下面的例子一個名為 myFunction()的函數(shù)放在 version1 命名空間中: version1 function myFunction() 第三步,在應(yīng)用了該命名
32、空間后,可以使用 use 指令進(jìn)行引用,也可以使用命名空間來限定標(biāo)識符的名稱。 下面的示例通過 use指令來引用 myFunction() 函數(shù): use namespace version1;myFunction(); 還可以使用限定名稱引用 myFunction() 函數(shù),如下面的示例所示: version1:myFunction(); 如果使用位于某個包中定義的類,則必須導(dǎo)入該包或該類。例如,SampleCode位于名為 samples 的包中,那么,在使用 SampleCode 類之前,必須使用下列導(dǎo)入語句之一: import samples.*; / 兩句任選一句 import sa
33、mples SampleCode; 通常,import 語句越具體越好。如果打算使用samples包中的SampleCode 類,則應(yīng)只導(dǎo)入SampleCode 類,而不應(yīng)導(dǎo)入該類所屬的整個包。導(dǎo)入整個包可能會導(dǎo)致意外的名稱沖突。3.1.2 文檔類 文檔類是AS3.0中的新概念。一個SWF動畫文件運行時,程序的入口是主場景時間軸的第一幀代碼,但如果使用了文檔類,那么就從文檔類開始,而時間軸代碼的功能就可以通過文檔類完成。package import flash.display.Sprite; public class main extends Sprite public function ma
34、in () init(); private function init ():void / 初始化代碼 在影片文件中實現(xiàn)文檔類需要如下設(shè)置和約定:文檔類對應(yīng)的腳本文件(*.as)必須與其對應(yīng)的影片文件(*.fla)放在同一文件夾下。在影片文件的屬性面板上的“文檔類”框中輸入該文檔類的類名。確保文件的發(fā)布設(shè)置為Flash Player 9以上版本和AS3.0。自定義的文檔類必須繼承自MovieClip類或Sprite類,如果還需要在fla文件的時間軸上寫代碼,則文檔類必須以MovieClip類為父類。使用文檔類,最好盡量避免在fla文件的時間軸上加入任何代碼。3.1.3 元件連接類 如果在程序代
35、碼中使用Flash設(shè)計時“庫”中的元件、聲音、位圖等資源,那么就需要使用元件連接類。 通常的做法,是以類定義的方式使用庫中資源,具體方法是:在庫面板,鼠標(biāo)右擊相應(yīng)的資源(如某個位圖元件),在打開的“鏈接屬性”對話框中,勾選“為ActionScript導(dǎo)出”復(fù)選框,同時激活上方的“類”和“基類”選項,完成類名和基類名的填寫。這里類名稱為連接類名。 比如,庫中某個位圖的連接類名為BImage,在主時間軸的某一關(guān)鍵幀,打開動作面板,寫入下列代碼: var b:BImage = new BImage(50,100); /創(chuàng)建位圖對象 var bb:Bitmap = Bitmap(b);addChild
36、(bb); 連接類與其它自定義類一樣,可以創(chuàng)建對應(yīng)的*.as代碼文件,并在代碼文件中實現(xiàn)一樣屬性和方法。3.1.4 自定義類的編寫public class 類名 / 屬性定義,包括常量和變量 / 方法定義,定義各種功能函數(shù),包括構(gòu)造函數(shù) (一) 構(gòu)造函數(shù) 首先需要定義一個構(gòu)造函數(shù),它是一個和類名相同的方法,當(dāng)需要創(chuàng)建一個類的實例時,這個方法將自動地被首先調(diào)用。比如,創(chuàng)建類的代碼段如下: package public class MyClass public function MyClass (arg:String) trace(arg + “you !”); 然后,在主時間軸上創(chuàng)建類的一個實例
37、,代碼如下: var myInstance:MyClass = new MyClass(“hello”);(二) 繼承 繼承是指一種代碼重用的形式,允許程序員基于現(xiàn)有類開發(fā)新類?,F(xiàn)有類通常稱為基類或超類,而新類稱為子類。 繼承的主要優(yōu)勢是,允許重復(fù)使用基類中的代碼,但不修改現(xiàn)有代碼。 此外,繼承不要求改變其他類與基類交互的方式。不必修改可能已經(jīng)過徹底測試或可能已被使用的現(xiàn)有類。 一個類可以從另一個類繼承而來,即這個類可以獲得父類所具有的所有屬性和方法,當(dāng)然標(biāo)記為private的屬性和方法除外。并且,子類可以增加自己的屬性和方法,或者改變父類中的一些內(nèi)容。 類的繼承使用extends關(guān)鍵字。 p
38、ackage /父類的定義 public class MySupperClass public function sayHello():void trace(“hello”); package / 子類的定義 public class MySubClass extends MySupperClass public function sayGoodbye():void trace(“Goodbye”); 注意,對上述兩個包,是放在兩個不同的腳本文件中,以類命名的as文件,并且與影片文件fla放在同一文夾下。在主時間軸上創(chuàng)建實例來使用它們 :var supper:MySupperClass = n
39、ew MySupperClass();supper.sayHello();var sub:MySubClass = new MySubClass();sub.sayHello();sbu.sayGoodbye(); (三) 覆蓋方法 覆蓋方法表示重新定義已繼承方法的行為,也叫重載。靜態(tài)方法不能繼承,也不能覆蓋。但是,實例方法可由子類繼承,也可覆蓋,只要符合以下兩個條件:實例方法在基類中不是使用 final 關(guān)鍵字聲明的。當(dāng) final 關(guān)鍵字與實例方法一起使用時,該關(guān)鍵字指明程序員的設(shè)計目的是要禁止子類覆蓋方法。實例方法在基類中不是使用 private 訪問控制說明符聲明的。如果某個方法在基類
40、中標(biāo)記為 private,則在子類中定義同名方法時不需要使用override 關(guān)鍵字,因為基類方法在子類中不可見。 要覆蓋符合這些條件的實例方法,子類中的方法定義必須使用 override 關(guān)鍵字,且必須在以下幾個方面與方法的超類版本相匹配:覆蓋方法必須與基類方法具有相同級別的訪問控制。標(biāo)記為內(nèi)部的方法與沒有訪問控制說明符的方法具有相同級別的訪問控制。覆蓋方法必須與基類方法具有相同的參數(shù)。覆蓋方法參數(shù)必須與基類方法參數(shù)具有相同的數(shù)據(jù)類型。覆蓋方法必須與基類方法具有相同的返回類型。 但是,覆蓋方法中的參數(shù)名不必與基類中的參數(shù)名相匹配,只要參數(shù)和每個參數(shù)的數(shù)據(jù)類相匹配即可。package publ
41、ic class MySubClass extends MySuperClass override public function sayHello():void trace(“hello from MySubClass”); Public function sayGoodbye():void trace(“Goodbye”); (四) 接口 接口是方法聲明的集合,以使不相關(guān)的對象能夠彼此通信。例如,AS3.0 定義了 IEventDispatcher 接口,其中包含的方法聲明可供類用于處理事件對象。 類是唯一可實現(xiàn)接口的 AS 3.0 語言元素。在類聲明中使用 implements 關(guān)鍵字可
42、實現(xiàn)一個或多個接口。下面的示例代碼定義兩個接口 IAlpha 和 IBeta 以及實現(xiàn)這兩個接口的類 Alpha:interface IAlpha function foo(str:String):String; interface IBeta function bar():void; class Alpha implements IAlpha, IBeta public function foo(param:String):String public function bar():void 在實現(xiàn)接口的類中,實現(xiàn)的方法必須:使用 public 訪問控制標(biāo)識符。使用與接口方法相同的名稱。擁有相
43、同數(shù)量的參數(shù),每一個參數(shù)的數(shù)據(jù)類型都要與接口方法參數(shù)的數(shù)據(jù)類型相匹配。使用相同的返回類型。3.1.5 類的訪問屬性3.1.6 類成員的訪問屬性屬性定義dynamic允許在運行時向?qū)嵗砑訉傩?。final不得由其他類繼承。internal (默認(rèn))對當(dāng)前包內(nèi)的引用可見。public對所有位置的引用可見。屬性定義internal(默認(rèn))對同一包中的引用可見。private對同一類中的引用可見。protected對同一類及派生類中的引用可見。public對所有位置的引用可見。static指定某一屬性屬于該類,而不屬于該類的實例。final不允許被子類重定義(僅用于非靜態(tài)方法成員)override指明
44、重定義繼承來的方法(僅用于方法)UserDefinedNamespace用戶定義的自定義命名空間名。3.1.7 包外定義的類 AS3.0 允許在一個腳本文件中定義多個類,但只能有一個類定義在包內(nèi)部,其余的類必段定義在包外部。在包內(nèi)部定義的類和腳本文件名同名,只有這個類才可以被外部代碼訪問。 在腳本文件內(nèi),包外定義的類在腳本文件外是不可見的,即不可直接訪問,一般用于輔助包內(nèi)的類,完成包內(nèi)的類的方法等功能實現(xiàn)。 3.1.8 對象的創(chuàng)建與使用var mySpr:Sprite = new Sprite(); 系統(tǒng)內(nèi)置的5個頂級基本數(shù)據(jù)類型在創(chuàng)建對象時可以省略new操作符,直接使用對應(yīng)的值即可,另外Ar
45、ray類與Object類也可以這樣創(chuàng)建對象. var myArr:Array = 1,2,3; 通過點運算符對屬性和方法進(jìn)行訪問: var mySpr:Sprite = new Sprite();mySpr.graphics.clear();mySpr.graphics.lineStyle(1);mySpr.graphics.moveTo(50,50);mySpr.graphics.lineTo(100,100);trace(mySpr.width); 3.2 案例創(chuàng)建圖形類程序3.2.1 案例任務(wù)描述 本案例要求使用面向?qū)ο缶幊讨械念惡蛯ο蟮南嚓P(guān)技術(shù),實現(xiàn)幾何圖形對象的相關(guān)參數(shù)的計算和輸出。
46、程序接收圖形形狀選擇和尺寸長度兩個參數(shù),圖形選擇類別有圓形、三角形和正方形三種;輸出周長、面積等參數(shù)。3.2.2 操作流程 程序功能演示; 學(xué)生動手練習(xí)。3.2.3 案例小結(jié) 本案例程序中GeometricShapes 案例程序體現(xiàn)了如何使用 AS3.0中很多面向?qū)ο蟮母拍詈凸δ?,其中包括:定義類、繼承類、多態(tài)、override 關(guān)鍵字、定義、擴(kuò)展和實現(xiàn)接口等等。 案例中還包括一個用于創(chuàng)建類實例的“ 工廠方法”,說明如何將返回值聲明為接口的實例,以及通過一般方法使用返回的接口對象。3.3 AS3.0中類的使用AS3.0中的類分為內(nèi)置類和自定義類兩種類型。 內(nèi)置類大致分成三大部分:頂級包、fl包
47、和flash包。fl包和flash包又可細(xì)分為各種不同類型的子包,比如flash.display包、flash.media包、包等。 頂級包包含了如int、Number、String、Array、Object、Boolean、XML等最基本的類和一些全局函數(shù);fl包包含的主要是各種組件類,即常用界面設(shè)計的按鈕、文本框、復(fù)選框等,而在程序中應(yīng)用最多、最廣泛的類在flash包中,如MovieClip類、Sprite類等,TextFields類包含在flash.text包中。 以頂級包為例,包含的全局常量、全局函數(shù)和核心ActionScript 類,參見教材上的表3-3,表3-4,表3-5。3.4
48、數(shù)值計算處理 在AS3.0中,通過使用int、uint、Number三種數(shù)值型數(shù)據(jù)類型和數(shù)學(xué)類Math類,實現(xiàn)各種數(shù)值計算和數(shù)學(xué)方法。 3.4.1 邊界情況 (一) Not a number 常量NaN表示“not a number”,它是Number類型中的一個非數(shù)值。NaN可以在未賦值或轉(zhuǎn)換失敗的Number實例中找到。針對非實數(shù)或未定義結(jié)果的數(shù)學(xué)操作也會產(chǎn)生NaN,如-1的平方根或零除以零等。var n:Number;trace(n); /NaNtrace(isNaN(n); /truetrace(n=NaN); / false ! 這就是為什么要使用isNaN()n= Number(“
49、this wont convert into a number”);trace(isNaN(n); /truen=10;trace(isNaN(n); /false (二) 無窮大 Number類型還提供了一些特殊的常數(shù)值用于表示正無窮大和負(fù)無窮大,分別是Number.POSITIVE_INFINITY和Number.NEGATIVE_INFINITY。如果最后得到無窮大的值,如讓某個Number變量除以零,Number的值將是其中一個特殊的無窮大值,而不會造成溢出或運行時錯誤。Var n:Numer = 10/0 ;Trace(n); /InfinityTrace(n = Number.PO
50、SITIVE_INFINITY); /true (三) 最大值和最小值 除了無窮大之外,根據(jù)數(shù)值在ActionScript虛擬機(jī)中的實現(xiàn),它們都有各自的物理限制。這些限制保存在三個數(shù)值類的MAX_VALUE和MIN_VALUE靜態(tài)常量中。對于Number類型,這兩個常量分別表示最大的正有限制值和最小的非零非負(fù)值。 trace(uint.MIN_VALUE); /0 trace(uint.MAX_VALUE); /4294967295 trace(int.MIN_VALUE); /-2147483648 trace(int.MAX_VALUE); /2147483647 trace(Number
51、.MIN_VALUE); /4.9406564584124654e-324 trace(Number.MAX_VALUE); /1.79769313486231e+3083.4.2 Math類 Math類是Object類的子類。該類的所有屬性和方法都是靜態(tài)的,必須直接使用類名訪問它的成員。 Math類中靜態(tài)的公共常量,參見教材中表3-6;靜態(tài)的公共方法,參見教材中表3-7。 3.5 案例小球隨機(jī)運動程序3.5.1 案例任務(wù)描述 該案例使用AS3.0中基本的計算表達(dá)式、Math類實現(xiàn)小球在舞臺上的隨機(jī)運動。小球運動時,以隨機(jī)產(chǎn)生的速度和方向進(jìn)行,并判斷是否碰到邊界,如碰到舞臺的任一邊界,則發(fā)出碰
52、撞聲并折回。 3.5.2 操作流程 程序功能演示; 學(xué)生動手練習(xí)。3.5.3 案例小結(jié) 該案例使用文檔類啟用舞臺上對象、外部定義的類調(diào)用庫中的元件鏈接類,完成整個程序的運行。小球的運動是計算小球的坐標(biāo),以x、y軸上變化的速度,達(dá)到其運動的方向不確定性、速度也是變化的。 通過數(shù)學(xué)類Math,調(diào)用其隨機(jī)函數(shù),產(chǎn)生x軸上速度的隨機(jī)值。尤其是對小球在舞臺上移動過程中的邊界檢測,及到邊界的折回處理,是較為常見的系統(tǒng)應(yīng)用計算功能需求。3.6日期和時間處理AS3.0中的Data類和flash.utils包中的Timer類,提供了大部分的計時功能。 3.6.1 處理 Date 對象 Date類是所有核心類中構(gòu)
53、造函數(shù)方法形式最為多變的類之一。創(chuàng)建 Date對象,有四種方式:var now:Date = new Date(); var millisecondsPerDay:int = 1000 * 60 * 60 * 24;/獲取一個表示自起始日期 1970 年 1 月 1 日后又過了一天時間的Date對象var startTime:Date = new Date(millisecondsPerDay);var millenium:Date = new Date(2000, 0, 1, 0, 0, 0, 0); var nextDay:Date = new Date(“Mon May 1 2006 1
54、1:30:00 AM”); 3.6.2 獲取時間單位值 可以使用 Date 類的屬性或方法從 Date 對象中提取各種時間單位的值。 提供了 Date 對象中的一個時間單位的值:fullYear 屬性;month 屬性,以數(shù)字格式表示,分別以 0 到 11 表示一月到十二月;date 屬性,表示月中某一天的日歷數(shù)字,范圍從 1 到 31;day 屬性,以數(shù)字格式表示一周中的某一天,其中 0 表示星期日;hours 屬性,范圍從 0 到 23;minutes 屬性;seconds 屬性;milliseconds 屬性。 可以用四種不同方式獲取Date 對象的月份值: month 屬性、getMo
55、nth() 方法、monthUTC 屬性、getMonthUTC() 方法。3.6.3 執(zhí)行日期和時間運算 可以使用 Date 類對日期和時間執(zhí)行加法和減法運算。日期值在內(nèi)部以毫秒的形式保存,因此應(yīng)將其它值轉(zhuǎn)換成毫秒,然后再將它們與 Date 對象進(jìn)行加減。public static const millisecondsPerMinute:int = 1000 * 60;public static const millisecondsPerHour:int = 1000 * 60 * 60;public static const millisecondsPerDay:int = 1000 *
56、60 * 60 * 24; var oneHourFromNow:Date = new Date();oneHourFromNow.setTime(oneHourFromNow.getTime() + millisecondsPerHour); var invoiceDate:Date = new Date(); / 將發(fā)票日期設(shè)置為今天的日期/ 加上 30 天以獲得到期日期var dueDate:Date = new Date(invoiceDate.getTime() + (30 * millisecondsPerDay); 3.6.4 控制時間間隔 Timer 類在每次達(dá)到指定的時間間隔
57、時都會調(diào)度計時器事件。 var oneMinuteTimer:Timer = new Timer(1000, 60); 3.7 案例日期時鐘程序3.7.1 案例任務(wù)描述 該案例使用ate類,獲取當(dāng)前時間的相應(yīng)參數(shù)對象,隨時刷新對應(yīng)幀的舞臺上的對象,從而做出實時的日期時鐘。日期時鐘顯出當(dāng)天的年月日及星期幾,時間方面的時、分、秒,以表盤指針實時轉(zhuǎn)動表示,小時和分鐘的指針在大表盤上轉(zhuǎn)動,而秒種的指針在大表盤里下方的小表盤上轉(zhuǎn)動。3.7.2 操作流程 程序功能演示; 學(xué)生動手練習(xí)。3.7.3 案例小結(jié) 該案例使用Date對象,制作實時日期時鐘的程序。在獲取當(dāng)前日期時間后,通過Date對象訪問,可以得到
58、年、月、日、星期幾、時、分、秒等所有數(shù)據(jù)。其中屬性適合文本顯示輸出,這里對星期幾做了個簡單的字符串?dāng)?shù)組的替換。 對時鐘的表盤的顯示,則是將當(dāng)前的時、分、秒換算成旋轉(zhuǎn)角度,來設(shè)置三個指針的旋轉(zhuǎn)角度值,保證了指針處在與時間對應(yīng)的正確位置。 3.8 案例百分秒記時器程序3.8.1 案例任務(wù)描述 本案例要求編程實現(xiàn)數(shù)字顯示的百分秒級記時器功能。最大記錄到小時單位,最小記錄到百分秒單位。要求程序使用getTimer獲取影片運行累積的時間,進(jìn)一步計算開始記時的時間、暫停的時間、繼續(xù)記時的需要。程序功能包括記時繼續(xù)(開始)和暫停,重新記時(記時清零)等,顯示則為每部分時間均為兩位數(shù)。 3.8.2 操作流程
59、程序功能演示; 學(xué)生動手練習(xí)。3.8.3 案例小結(jié) 本案例程序使用getTimer函數(shù)實現(xiàn),調(diào)用getTimer函數(shù),返回值的類型為Number,即返回自 SWF 文件開始播放時起已經(jīng)過的毫秒數(shù)。 程序運行時,在不同時間點,分別記錄下getTimer函數(shù)的值,再進(jìn)行相應(yīng)的計算處理,便得到功能需求中的各種時間差,從而達(dá)到實現(xiàn)記時器的功能。感謝您的關(guān)注!第4章事件偵聽及用戶交互Flash AS 3.0事件和事件偵聽Event類系統(tǒng)內(nèi)置事件定時器事件及響應(yīng)鼠標(biāo)事件及響應(yīng)鍵盤事件及響應(yīng)4.1 事件及事件偵聽4.1.1 事件 事件就是發(fā)生的ActionScript能夠識別并可響應(yīng)的事情。許多事件與用戶交
60、互相關(guān)聯(lián),諸如用戶單擊某個按鈕或按鍵盤上的某個鍵之類。還有其他類型的事件。 例如,使用 ActionScript加載外部圖像,有一個事件可以知道圖像何時加載完畢。當(dāng)ActionScript程序運行時,從概念上講,它只是坐等某些事情發(fā)生。事情發(fā)生時,為這些事件指定的ActionScript代碼將運行。4.1.2事件處理過程 用于指定為響應(yīng)特定事件而執(zhí)行的特定操作的技術(shù)稱為事件處理。在編寫執(zhí)行事件處理的ActionScript 代碼時,需要識別三個重要元素:事件源:發(fā)生該事件的是哪個對象?例如,單擊了哪個按鈕?事件源也稱為事件目標(biāo)。事件:將要發(fā)生什么事情,識別特定事件非常重要,因為許多對象都會觸發(fā)
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025收藏品買賣合同范文
- 2024年度四川省公共營養(yǎng)師之四級營養(yǎng)師題庫附答案(典型題)
- 2024年度四川省公共營養(yǎng)師之三級營養(yǎng)師考前沖刺模擬試卷A卷含答案
- 2025合伙買車合同
- 2025年中國防腐油漆行業(yè)市場發(fā)展監(jiān)測及投資戰(zhàn)略咨詢報告
- 2025年中國嬰童用品行業(yè)市場深度分析及發(fā)展前景預(yù)測報告
- 鋁箔及鋰電池專用鋁箔、鋰電池外殼可行性研究報告
- 可視對講行業(yè)市場發(fā)展及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2024中國有色金屬壓延加工市場前景及投資研究報告
- 2024-2030年中國中央廚房行業(yè)市場發(fā)展監(jiān)測及投資戰(zhàn)略規(guī)劃報告
- 抖音團(tuán)購培訓(xùn)
- 刑事訴訟法綜合實訓(xùn)報告
- 部編版五年級上冊語文第七單元《-即景》作文500字【9篇】
- JJG 703-2003光電測距儀行業(yè)標(biāo)準(zhǔn)
- 漫話春秋戰(zhàn)國智慧樹知到期末考試答案2024年
- 垃圾運輸清運合同
- 2024年不良資產(chǎn)處置相關(guān)項目融資計劃書
- 2023-2024學(xué)年江蘇省盱眙縣九年級英語第一學(xué)期期末調(diào)研試題含解析
- 遺傳學(xué)-第二版-課后答案(1-8章)
- 陜西音樂藝考分析報告
- 高考英語高頻短語按字母排序
評論
0/150
提交評論