Technolege of ActionScript Programming
廣州大學(xué) 網(wǎng)絡(luò)中心
林驍于
第一章FLASH基本概念和知識(shí)
本課程的目和任務(wù)
本課程是《FLASH電影動(dòng)畫與課件設(shè)計(jì)》的后續(xù)課程,課程開設(shè)的目的在于向?qū)W員系統(tǒng)地、詳細(xì)地介紹FLASH動(dòng)作腳本ACTIONSCRIPT的基本語法、編程技術(shù)、設(shè)計(jì)技巧及其在課件制作中的應(yīng)用等,本課程力求學(xué)員通過理論知識(shí)的學(xué)習(xí)和上機(jī)聯(lián)系后,可以熟練掌握FLASH動(dòng)作腳本的編程的方法和技巧,設(shè)計(jì)出應(yīng)用于本職教學(xué)工作中的課件和教學(xué)演示多媒體文稿,以提高教學(xué)質(zhì)量和水平。
在課程的學(xué)習(xí)過程中,學(xué)員除了掌握FLASH動(dòng)作腳本設(shè)計(jì)的理論知識(shí)外,還要完成相應(yīng)的上機(jī)實(shí)習(xí),編制一定水平的腳本程序,培養(yǎng)出一定的實(shí)際設(shè)計(jì)能力,完成教師要求的設(shè)計(jì)任務(wù),最后通過理論考試和設(shè)計(jì)大作業(yè)考核。
本課程內(nèi)容選取
本課程內(nèi)容的選取原則是從FLASH動(dòng)作腳本編程的基本語法出發(fā),系統(tǒng)、完整、詳細(xì)地介紹FLASH ACTIONSCRIPT的編程方法和技巧,著重強(qiáng)調(diào)ACTIONSCRIPT在課件制作和教學(xué)演示方面的應(yīng)用等,力求選取的教學(xué)內(nèi)容與學(xué)員的實(shí)際工作緊密結(jié)合。
本課程學(xué)習(xí)的方法
為了能在比較短的時(shí)間學(xué)會(huì)FLASH動(dòng)作腳本編程,本課程的學(xué)習(xí)在探索一條途徑,這個(gè)學(xué)習(xí)途徑就是:FLASH基本設(shè)計(jì)基礎(chǔ)→actionscript編程界面→對象、動(dòng)作的概念與知識(shí)→實(shí)例。同時(shí),還要求學(xué)員加強(qiáng)課外的自我學(xué)習(xí)、模仿和練習(xí)。
本課程基本要求
本課程要求參加學(xué)習(xí)的學(xué)員具有FLASH電影動(dòng)畫的基礎(chǔ)知識(shí)和基本的操作技能。
1. Flash電影動(dòng)畫的組成
symbole(symbol, symbol instance)→flame(flame, stage) → timeline→layer →scene →movie(stage)
2. Flash 設(shè)計(jì)畫面的小節(jié)
工作區(qū)(stage)
菜單(重點(diǎn):file、insert、modify、window)
面板(重點(diǎn):tool、timeline、property 、、、、、、、、)
3. Flash 一般設(shè)計(jì)畫面的重要環(huán)節(jié)
文件的創(chuàng)建、常用工具的使用、創(chuàng)建圖形圖符原型,創(chuàng)建聲音圖符、創(chuàng)建按鈕圖符、幀和關(guān)鍵幀、層(普通層、向?qū)?、遮罩層)和時(shí)間線的使用、兩種漸變、場景、電影
學(xué)員上機(jī)練習(xí):無
第二章 ActionScript基本概念和知識(shí)
¨ Flash ActionScript基本知識(shí)
– AS載體分類(本節(jié)重點(diǎn))
¨ Flame
¨ Object
– Button Symbol
– Movie Clip
– 設(shè)計(jì)Flash ActionScript的基本步驟
1. 確定Flash動(dòng)作的內(nèi)容
2. 打開動(dòng)作面板:Window-Development Panels-Actions
3. 確定AS載體
4. 開始編寫動(dòng)作腳本程序
5. 運(yùn)行調(diào)試動(dòng)作腳本程序
6. 輸出到Flash電影
– AS面板總體認(rèn)識(shí)(本節(jié)重點(diǎn))(flash MX)
¨ 動(dòng)作工具箱
¨ 腳本導(dǎo)航器
¨ 腳本窗口
¨ 參數(shù)設(shè)定區(qū)(標(biāo)準(zhǔn)模式)
¨ 按鈕組:添加項(xiàng)目/查找/查找并替換/插入目標(biāo)路徑/檢查語法/自動(dòng)套用格式/顯示代碼格式/腳本幫助/調(diào)試選項(xiàng)
– 兩種模式
Normal Mode:在動(dòng)作工具箱中選擇動(dòng)作
Expert Mode:直接在腳本窗口中編寫
– AS的調(diào)試(本節(jié)重點(diǎn))
輸出窗口
調(diào)試工具窗口
– Sample1-1
學(xué)員上機(jī)練習(xí):
Sample1-1、
¨ 熟悉FLASH的動(dòng)作面板
¨ 掌握動(dòng)作腳本編程的一般步驟
¨ 掌握輸出窗口的用法
¨ 理解面向?qū)ο螅ū菊轮攸c(diǎn)難點(diǎn))
– Flash actionscript是一種面向?qū)ο蟮木幊陶Z言
– 對象:flash動(dòng)畫中actionscript可以操縱的單元(重點(diǎn))
– 理解例子
¨ 一個(gè)圖符實(shí)例(symbol instance)
¨ Actionscript可以改變圖符實(shí)例的屬性
– 對象里有什么?
¨ 屬性
¨ 方法:具有固定功能的一段程序
¨ 子對象
– FLASH 的對象結(jié)構(gòu)
問題:如何理解flash的對象結(jié)構(gòu)
– 三個(gè)重要的詞
this 當(dāng)前對象
_root 根對象
_parent 父對象
– 對象的表示:點(diǎn)路徑
例如,在上圖中,this是S1,要使用到P1:
絕對路徑: _root.MC2.S1.P1
相對路徑: this.P1
– 小結(jié):使用屬性、方法和對象
– 屬性的操作
賦值
– 方法的操作
調(diào)用
– 對象的操作
創(chuàng)建、刪除等
學(xué)員上機(jī)練習(xí):理解附錄A實(shí)例一 酷打字效果
第三章 對象的屬性和方法
– 理解Flash 的動(dòng)作
動(dòng)作的三因素
– 事件 Event
– 動(dòng)作 Action =語句
– 目標(biāo) Target
事件 Event
– 鼠標(biāo)事件
– 鍵盤事件
– 幀事件
– 電影剪輯事件
動(dòng)作 Active
– 理解函數(shù):形成Flash Action
– 基本動(dòng)作和函數(shù)及其功能
控制時(shí)間線
瀏覽器和網(wǎng)絡(luò)
電影剪輯
– 復(fù)雜動(dòng)作
目標(biāo) Target
控制時(shí)間線
瀏覽器和網(wǎng)絡(luò)
電影剪輯
學(xué)員上機(jī)練習(xí):(無)
– 接觸FLASH的對象
一般對象的屬性(P20)
_alpha
_currentframe
_droptarget
_focusrect
_framesloaded
_height
_highquality
_name
_quality
_rotation
_soundbuftime
_target
_totalframes
_url
_visible
_width
_x
_xmouse
_xscale
_y
_ymouse
_yscale
常用的命令
1. gotoAndPlay
2. gotoAndStop
3. on
4. play
5. stop
6. stopAllSound
7. fscommand
8. getURL
9. loadMovie
10. unloadMovie
11. duplicateMovieClip
12. onClipEvent
13. removeMovieClip
14. setProperty
15. startDrag
16. stopDrag
17. updateAfterEvent
18. trace
– flash ActionScript類的結(jié)構(gòu)
flash ActionScript類的結(jié)構(gòu)(圖一)
flash ActionScript元素的結(jié)構(gòu):
運(yùn)算符(例如:各種算術(shù)運(yùn)算、賦值運(yùn)算等)
常量 (例如:TRUE,FALSE,NULL等)
屬性 (一些通用的屬性,例如:_xmouse/_ymouse等)
函數(shù) (一些通用的方法或數(shù)學(xué)計(jì)算程序等,例如:getVersion()/getTimer()/number())
動(dòng)作 (這部分是flash ActionScript的重要核心之一,是可以控制flash各種對象和組成部分的一些控制命令、語句和變量等。典型的例子如:GotoAndPlay,While等)
影片控制
瀏覽器/網(wǎng)絡(luò)
影片剪輯控制
變量
條件循環(huán)
打印
用戶定義的函數(shù)
其它動(dòng)作
對象 (這部分是flash ActionScript的重要核心之一,通常我們將這里出現(xiàn)的四類對象稱為內(nèi)置對象)
核心對象(flash ActionScript的核心對象)
影片(flash ActionScript專用的操縱對象)
客戶端/服務(wù)器(用于客戶端和服務(wù)器之間通訊的對象)
創(chuàng)作(flash自定義創(chuàng)作應(yīng)用程序)
flash UI組件 (組件有用戶界面控件、容器(例如滾動(dòng)窗格)和不可視對象(例如FocusManager)。一般組件帶有參數(shù),利用這些參數(shù)可以修改組件的外觀和行為,例如組件有FlistBox、FpushButton、FRadioButton)
注意:
一些內(nèi)置 Flash 對象是頂級(jí)對象,頂級(jí)對象可以直接使用其方法和屬性,而不用創(chuàng)建該對象的新實(shí)例。例如,要使用頂級(jí) Math 對象的方法和屬性,可以使用內(nèi)置對象的名稱,后面加上該方法或?qū)傩裕缦滤荆?nbsp;area = Math.PI * radius * radius;
其它內(nèi)置對象,例如 Date 對象,則需要?jiǎng)?chuàng)建該對象的新實(shí)例,然后才能使用它的方法和屬性。一般在動(dòng)作面板的工具箱里有new構(gòu)造函數(shù)的對象使用前需要?jiǎng)?chuàng)建。
創(chuàng)建了內(nèi)置對象的一個(gè)新實(shí)例后,該對象的所有屬性和方法都會(huì)被拷貝到該實(shí)例中。
學(xué)員上機(jī)練習(xí):瀏覽附錄C 第3.Flash Action Script的元素分類:
第四章 ActionScript編程
¨ ActionScript數(shù)據(jù)類型
– 整型/小數(shù)型
¨ 65
¨ -181
¨ 3.14159
– 字符串
¨ “北京路 102號(hào)”
¨ 轉(zhuǎn)義字符:以“\”開始,具體見參考書p8
– 布爾數(shù)
¨ True/False
– 實(shí)例Instance
¨ 屬性
¨ 方法
– 對象Object
¨ 屬性
¨ 方法
¨ ActionScript常量變量
– 常量
意義
定義常量
– 內(nèi)置的常量為大寫,如key.ENTER,nath.PI
使用常量
– 變量
意義
定義變量
– 可以不預(yù)先聲明,賦值決定類型
使用變量
– 注意變量的作用域
– 函數(shù)參數(shù)是局部變量
– 數(shù)組變量的使用
¨ ActionScript運(yùn)算符
– 見參考書 P11-12
– 運(yùn)算種類
數(shù)值運(yùn)算
邏輯運(yùn)算
比較運(yùn)算
字符串運(yùn)算
位運(yùn)算
賦值運(yùn)算
¨ ActionScript語句
– { }
作用:語句體的開始和結(jié)束
– 函數(shù)
聲明
調(diào)用
– 例子
Function test( )
{
trace(“This is an Example for show a function.”);
}
Test( );
– 注釋語句 //和/* */
格式
//說明文字
/*
…
*/
例子
//這是使用注釋語句的說明
a =5;
/* 下面的都是注釋
這是一行注釋
注釋到這行末結(jié)束*/
trace(a);
¨ ActionScript 程序的結(jié)構(gòu)
– 順序結(jié)構(gòu)
格式
ActionScript語句1;
ActionScript語句2;
ActionScript語句3;
ActionScript語句4;
…
例子
a = 2;
b = 5;
c = a+b;
Trace (“c=” );
Trace ( c );
– 循環(huán)結(jié)構(gòu): For語句
格式
for (初始化;條件;遞進(jìn)){
…
}
例子
for ( i =1; i<10; i++) {
trace( i );
}
說明
– 中斷循環(huán)命令:break;
– 重新開始循環(huán)命令:continue;
– 循環(huán)結(jié)構(gòu): while語句
格式
while (條件) {
…
}
例子
i = 1;
while (i<10){
trace( i );
i ++;
}
說明
– 中斷循環(huán)命令:break;
– 重新開始循環(huán)命令:continue;
– 循環(huán)結(jié)構(gòu): do…while語句
格式
do {
…
} while (條件);
例子
i = 1;
do {
trace( i );
i ++;
} while (i<10)
說明
– 中斷循環(huán)命令:break;
– 重新開始循環(huán)命令:continue;
– 條件結(jié)構(gòu) if
¨ 格式
If (條件表達(dá)式){
…
}
Else
{
…
}
¨ 例子
If (a>5) {
trace(“The Value of Variable a is bigger than 5. ”);
}
Else {
trace (“The Value of Variable a not bigger than 5.”);
}
第五章 全面認(rèn)識(shí)ActionScript
一、 ActionScript的一些重要知識(shí)要點(diǎn)
1. FLASH MX ActionScript的條目748條
2. ActionScript條目的分類:(見ActionScript元素的分類)
3. Flash 具有內(nèi)置的函數(shù)是執(zhí)行特定的任務(wù)一段預(yù)先編制好的程序,例如獲得播放影片的 Flash Player 的版本號(hào) (getVersion)。屬于對象的函數(shù)稱為方法。不屬于對象的函數(shù)稱為頂級(jí)函數(shù)。當(dāng)然是在“動(dòng)作”面板的對象中找到對象的方法,在函數(shù)中找到頂級(jí)函數(shù)。
4. 動(dòng)作腳本和 JavaScript 之間的一些差異:
u 動(dòng)作腳本不支持瀏覽器專用的對象,例如文檔、窗口和錨記。
u 動(dòng)作腳本不能完全支持所有的 JavaScript 內(nèi)置對象。
u 動(dòng)作腳本支持 JavaScript 不允許的語法構(gòu)造(例如 tellTarget 和 ifFrameLoaded 動(dòng)作和斜杠語法)。但是,建議不要使用這些語法構(gòu)造,而應(yīng)該使用與 JavaScript 元素相同的那些動(dòng)作腳本元素(例如,with、_framesloaded 和點(diǎn)語法)。
u 動(dòng)作腳本不支持某些 JavaScript 語法構(gòu)造,例如 try、catch、throw 和語句標(biāo)號(hào)。
u 動(dòng)作腳本不支持 JavaScript Function 構(gòu)造器。
u 在動(dòng)作腳本中,eval 動(dòng)作只能執(zhí)行變量引用。
u 在 JavaScript 中,undefined 的 toString 是 undefined。在 Flash 5 和 Flash MX 中,為了能夠兼容 Flash 4,undefined 的 toString 是 ""。
u 在 JavaScript 中,在數(shù)字環(huán)境中評估 undefined 會(huì)產(chǎn)生 NaN。在 Flash 5 和 Flash MX 中,為了兼容 Flash 4,評估 undefined 會(huì)產(chǎn)生 0。
u 在 JavaScript 中,當(dāng)在布爾環(huán)境中評估字符串時(shí),如果字符串的長度不為零,則結(jié)果為 true;如果字符串的長度為零,則結(jié)果為 false。在動(dòng)作腳本中,字符串會(huì)轉(zhuǎn)換為數(shù)字。如果該數(shù)字不是零,則結(jié)果為 true;否則結(jié)果為 false。
5. 類、對象、實(shí)例、繼承性
在面向?qū)ο竽_本中,信息按照被稱為“類”的組進(jìn)行組織。用戶可以創(chuàng)建自己的類,也可以使用內(nèi)置的動(dòng)作腳本類;內(nèi)置類位于“動(dòng)作”面板的“對象”文件夾中。當(dāng)創(chuàng)建用戶的類時(shí),要定義它創(chuàng)建的每個(gè)對象的所有屬性(特性)和方法(行為),就如同定義真實(shí)世界的對象一樣。例如,可以說一個(gè)人有性別、身高和發(fā)色等屬性,以及交談、行走和投擲等方法。在此示例中,“人”就是一個(gè)類,并且每個(gè)人都是一個(gè)對象或該類的一個(gè)實(shí)例。
定義類可以創(chuàng)建一個(gè)名為構(gòu)造器函數(shù)的特殊函數(shù)。(內(nèi)置類具有內(nèi)置的構(gòu)造器函數(shù)。)例如,如果需要關(guān)于影片中某個(gè)自行車騎手的信息,可以創(chuàng)建一個(gè)構(gòu)造器函數(shù) Biker,它具有屬性 time 和 distance,以及能夠表示自行車行進(jìn)速度的方法 getSpeed:
function Biker(t, d) {
this.time = t;
this.distance = d;
this.getSpeed = function() {return this.time / this.distance;};
}
在此示例中,要?jiǎng)?chuàng)建一個(gè)需要兩條信息或參數(shù)才能完成工作的函數(shù):t 和 d。當(dāng)調(diào)用該函數(shù)創(chuàng)建對象的新實(shí)例時(shí),會(huì)將參數(shù)傳遞給它。下面的代碼創(chuàng)建對象 Biker 的兩個(gè)實(shí)例,稱為 emma 和 hamish。
emma = new Biker(30, 5);
hamish = new Biker(40, 5);
在面向?qū)ο竽_本中,類可以按照特定的順序相互接收屬性和方法,這稱為繼承性。可以使用繼承性來擴(kuò)展或重新定義類的屬性和方法。從其它類繼承而來的類稱為子類。向其它類傳遞屬性和方法的類稱為超類。類可以既是子類又是超類。
對象就是類的實(shí)例,動(dòng)作腳本中的對象可以是純的數(shù)據(jù)容器,或者它們可以在舞臺(tái)上以圖形化方式表示為影片剪輯、按鈕或文本字段。所有影片剪輯都是內(nèi)置類 MovieClip 的實(shí)例,所有按鈕都是內(nèi)置類 Button 的實(shí)例。每個(gè)影片剪輯實(shí)例都包含 MovieClip 類的所有屬性(例如,_height、_rotation、_totalframes)和所有方法(例如,gotoAndPlay、loadMovie、startDrag)。
6. 對象:電影剪輯、按鈕和文本字段
因?yàn)橛捌糨嬀褪切⌒偷?nbsp;Flash 影片,所以它們是 Flash 影片的最重要的對象:它們具有彼此獨(dú)立運(yùn)行的時(shí)間軸。例如,如果主時(shí)間軸只有一個(gè)幀,而該幀中的影片剪輯有十個(gè)幀,則當(dāng)播放主影片時(shí),該影片剪輯中的每個(gè)幀都會(huì)播放。這使得實(shí)例可以作為能夠相互通信的自治對象。每個(gè)影片剪輯實(shí)例都有一個(gè)唯一的實(shí)例名稱,以便可以通過動(dòng)作找到它們。例如,在舞臺(tái)上可能有多個(gè)實(shí)例(例如,leftClip 和 rightClip),而要求在某一時(shí)刻只播放一個(gè)。要指定通知播放某個(gè)特定實(shí)例的動(dòng)作,需要使用它的名稱。在下面的示例中,影片剪輯的名稱為 leftClip:
leftClip.play();
實(shí)例名稱還可以在影片播放時(shí)復(fù)制、刪除和拖動(dòng)影片剪輯。影片剪輯可以通過動(dòng)作腳本動(dòng)態(tài)設(shè)置和獲得其值的屬性。更改和讀取這些屬性可以更改影片剪輯的外觀和標(biāo)識(shí),這也是創(chuàng)建交互性的關(guān)鍵。例如,下面的腳本使用 setProperty 動(dòng)作將 navigationBar 實(shí)例的透明度(alpha 設(shè)置)設(shè)置為 10:
setProperty("navigationBar", _alpha, 10);
7.
二、ActionScript的思想和知識(shí)結(jié)構(gòu)
1. 基本名詞定義與解釋
基礎(chǔ)類:
常數(shù)是不變的元素。例:常數(shù) Key.TAB 的含義始終不變:它代表鍵盤上的 Tab 鍵。
數(shù)據(jù)類型是值和可以對這些值執(zhí)行的動(dòng)作的集合。動(dòng)作腳本數(shù)據(jù)類型包括字符串、數(shù)字、布爾值、對象、影片剪輯、函數(shù)、空值和未定義。
標(biāo)識(shí)符是用于表明變量、屬性、對象、函數(shù)或方法的名稱。它的第一個(gè)字符必須是字母、下劃線 (_) 或美元記號(hào) ($)。其后的字符必須是字母、數(shù)字、下劃線或美元記號(hào)。例:firstName 是變量的名稱。
變量是保存任何數(shù)據(jù)類型的值的標(biāo)識(shí)符。可以創(chuàng)建、更改和更新變量??梢垣@得它們存儲(chǔ)的值以在腳本中使用。例:在下面的示例中,等號(hào)左側(cè)的標(biāo)識(shí)符是變量:
x = 5;
name = "Lolo";
customer.address = "66 7th Street";
c = new Color(mcinstanceName);
布爾值是 true 或 false 值。
表達(dá)式是代表值的動(dòng)作腳本元件的任意合法組合。表達(dá)式由運(yùn)算符和操作數(shù)組成。例:在表達(dá)式 x + 2 中,x 和 2 是操作數(shù),而 + 是運(yùn)算符。
函數(shù)是可以向其傳遞參數(shù)并能夠返回值的可重復(fù)使用的代碼塊。例:可以向 getProperty 函數(shù)傳遞屬性名和影片剪輯的實(shí)例名,然后它會(huì)返回屬性值。getVersion 函數(shù)會(huì)返回當(dāng)前正在播放影片的 Flash Player 的版本。
關(guān)鍵字是有特殊含義的保留字。例如,var 是用于聲明本地變量的關(guān)鍵字。不能使用關(guān)鍵字作為標(biāo)識(shí)符。例:var 不是合法的變量名。
運(yùn)算符是通過一個(gè)或多個(gè)值計(jì)算新值的術(shù)語。例如,加法 (+) 運(yùn)算符可以將兩個(gè)或多個(gè)值相加到一起,從而產(chǎn)生一個(gè)新值。運(yùn)算符處理的值稱為操作數(shù)。
參數(shù)(也稱為參量)是用于向函數(shù)傳遞值的占位符。例:下面的 welcome 函數(shù)使用它在參數(shù) firstName 和 hobby 中接收到的兩個(gè)值:
function welcome(firstName, hobby) {
welcomeText = "Hello, " + firstName + "I see you enjoy " + hobby;
}
目標(biāo)路徑是影片中影片剪輯實(shí)例名稱、變量和對象的分層結(jié)構(gòu)地址??梢栽谟捌糨媽傩詸z查器中對影片剪輯實(shí)例進(jìn)行命名。(主時(shí)間軸的名稱始終為 _root。)可以使用目標(biāo)路徑引導(dǎo)影片剪輯中的動(dòng)作或者來獲得或設(shè)置變量的值。例:下面的語句是指向影片剪輯 stereoControl 內(nèi)的變量 volume 的目標(biāo)路徑:
_root.stereoControl.volume
對象動(dòng)作類
動(dòng)作是在播放影片時(shí)指示影片執(zhí)行某些任務(wù)的語句。例:gotoAndStop 將播放頭放置到特定的幀或標(biāo)簽。
類是可以創(chuàng)建的用于定義新類型對象的數(shù)據(jù)類型。要定義類,需要?jiǎng)?chuàng)建一個(gè)構(gòu)造器函數(shù)。
構(gòu)造器是用于定義類的屬性和方法的函數(shù)。例:下面的代碼通過創(chuàng)建名為 Circle 的構(gòu)造器函數(shù)創(chuàng)建了一個(gè)新的 Circle 類:
function Circle(x, y, radius){
this.x = x;
this.y = y;
this.radius = radius;
}
事件是在影片播放時(shí)發(fā)生的動(dòng)作。例:在以下情況時(shí)會(huì)產(chǎn)生不同的事件:加載影片、播放頭進(jìn)入幀、用戶單擊按鈕或影片剪輯或用戶通過鍵盤鍵入。
事件處理函數(shù)是管理諸如 mouseDown 或 load 等事件的特殊動(dòng)作。動(dòng)作腳本事件處理函數(shù)共有兩類:動(dòng)作和方法。但事件處理函數(shù)動(dòng)作只有兩個(gè),即 on 和 onClipEvent。在“動(dòng)作”工具箱中,每個(gè)具有事件處理函數(shù)方法的動(dòng)作腳本對象都有一個(gè)名為“事件”的子類別。
實(shí)例是屬于某個(gè)類的對象。類的每個(gè)實(shí)例包含該類的所有屬性和方法。所有影片剪輯都是具有 MovieClip 類的屬性(例如 _alpha 和 _visible)和方法(例如 gotoAndPlay 和 getURL)的實(shí)例。
實(shí)例名稱是在腳本中用來代表影片剪輯和按鈕實(shí)例的唯一名稱??梢允褂脤傩詸z查器為舞臺(tái)上的實(shí)例指定實(shí)例名稱。例:庫中的主元件可以稱為 counter,影片中該元件的兩個(gè)實(shí)例可以使用實(shí)例名稱 scorePlayer1 和 scorePlayer2。下面的代碼用實(shí)例名稱設(shè)置每個(gè)影片剪輯實(shí)例中稱為 score 的變量:
_root.scorePlayer1.score += 1;
_root.scorePlayer2.score -= 1;
方法是分配給對象的函數(shù)。分配函數(shù)之后,可以將其作為該對象的方法進(jìn)行調(diào)用。例:在下面的代碼中,clear 成為 controller 對象的方法:
function reset(){
this.x_pos = 0;
this.x_pos = 0;
}
controller.clear = reset;
controller.clear();
對象是屬性和方法的集合,每個(gè)對象都有自己的名稱,并且都是特定類的實(shí)例。內(nèi)置對象是在動(dòng)作腳本語言中預(yù)先定義的。例:內(nèi)置的 Date 對象可以提供系統(tǒng)時(shí)鐘的信息。
屬性是定義一個(gè)對象的屬性。例:_visible 是定義是否隱藏影片剪輯的屬性,所有影片剪輯都有此屬性。
2. 層和時(shí)間線的理解:顯示列表
術(shù)語:顯示列表是表示Flash電影里各個(gè)層、電影剪輯和時(shí)間線之間的關(guān)系。
示意圖:
理解:
每部電影在最初的位置有一個(gè)層,叫第0層(_level0),在該層上的時(shí)間線叫主時(shí)間線,在第0層上可以放置另一層,叫第1層(_level1),同理可以有第N層(_levelN)。
在某一層上可以放置電影剪輯實(shí)例(應(yīng)該理解電影剪輯實(shí)例放置在時(shí)間線之中)電影剪輯實(shí)例又有自己的時(shí)間線,電影剪輯之中又可以放置電影剪輯。根據(jù)電影剪輯之間的關(guān)系,有父剪輯、父時(shí)間線、子剪輯、子時(shí)間線等名詞。
在各層和各電影剪輯中,可以有各種內(nèi)置對象和創(chuàng)建的對象。底層對象可能會(huì)影響到上層對象。例如改變父時(shí)間線的_xscale,會(huì)導(dǎo)致嵌入的子時(shí)間線的_xscal也發(fā)生改變。
時(shí)間線之間可以彼此發(fā)送消息,例如一個(gè)電影剪輯的時(shí)間線最后一幀的動(dòng)作指示開始播放另一電影剪輯的時(shí)間線。
3. 數(shù)據(jù)類型、變量和常量的知識(shí)結(jié)構(gòu)
4. 變量的知識(shí)結(jié)構(gòu)和要點(diǎn)
(1) 命名規(guī)則
l 符合標(biāo)識(shí)苻命名標(biāo)準(zhǔn);
l 不能是保留字;
l 不能是ActionScript的關(guān)鍵字;
l 不能是類名。
(2)變量的分類和作用范圍
l 本地變量:{ }的范圍之內(nèi),例如以下例子:
function makeDays() {
var i;
for( i = 0; i < monthArray[month]; i++ ) {
_root.Days.attachMovie( "DayDisplay", i, i + 2000 );
_root.Days[i].num = i + 1;
_root.Days[i]._x = column * _root.Days[i]._width;
_root.Days[i]._y = row * _root.Days[i]._height;
column = column + 1;
if (column == 7 ) {
column = 0;
row = row + 1;
}
}
}
l 時(shí)間線變量:應(yīng)用于時(shí)間線上的變量,注意應(yīng)該在第一幀創(chuàng)建變量,因?yàn)闀r(shí)間線上前面的幀無法使用后面幀定義的變量。
l 全局變量:全局變量和函數(shù)對于整個(gè)電影中的每一時(shí)間線和范圍而言都是可見的。若要?jiǎng)?chuàng)建具有全局范圍的變量,要在變量名稱前使用 _global 標(biāo)識(shí)符,并且不使用 var = 語法。例如:
var _global.myName = "George"; // 語法錯(cuò)誤
_global.myName = "George"; //正確
注意:在有同名變量的情況下,局部變量覆蓋全局變量。
5. 數(shù)組相關(guān)知識(shí)
在ActionScript中,數(shù)組Array看成是對象(數(shù)學(xué)內(nèi)置對象),那么按照ActionScript的一貫做法,它的原型叫Array類,它的應(yīng)用實(shí)例叫Array對象。
Array對象的下標(biāo)叫索引(index),索引是從0到n-1的。例如第一個(gè)數(shù)組元素是my_Array[0]。
Array實(shí)例在使用之前需要new一下。
Array的方法、屬性:
New array 構(gòu)造Array
Array.length 指定數(shù)組中元素?cái)?shù)量的非從零開始的整數(shù)
Array.concat() 連接參數(shù),并將其作為新數(shù)組返回
Array.join() 將數(shù)組內(nèi)的所有元素聯(lián)接為一個(gè)字符串
Array.pop() 刪除數(shù)組中最后一個(gè)元素,并返回該元素的值
Array.push() 將一個(gè)或多個(gè)元素添加到數(shù)組的結(jié)尾,并返回該數(shù)組的新長度
Array.reverse() 倒轉(zhuǎn)數(shù)組的方向
Array.shift() 刪除數(shù)組中第一個(gè)元素,并返回該元素的值
Array.slice() 提取數(shù)組中的一部分,并將該部分作為新數(shù)組返回
Array.sort() 就地對數(shù)組進(jìn)行排序
Array.sortOn() 基于數(shù)組中的某個(gè)字段對數(shù)組進(jìn)行排序
Array.splice() 在數(shù)組中添加元素和刪除元素
Array.toString() 返回表示 Array 對象中元素的字符串值
Array.unshift() 將一個(gè)或多個(gè)元素添加到數(shù)組的開頭,并返回該數(shù)組的新長度
6. 事件的知識(shí)結(jié)構(gòu)
(1)處理事件的途徑
l 事件處理函數(shù)方法
事件處理函數(shù)方法是將事件處理歸并到某一類的方法中去,該方法在事件在該類的實(shí)例上發(fā)生時(shí)調(diào)用。
事件處理函數(shù)的基本結(jié)構(gòu)是:
對象名.事件名稱 = 函數(shù)名function () {
程序代碼
}
可以用于事件處理函數(shù)的對象有:Button、ContextMenu、ContextMenuItem、Key、LoadVars、LocalConnection、Mouse、MovieClip、MovieClipLoader、Selection、SharedObject、Sound、Stage、TextField、XML 和 XMLSocket。
l 事件偵聽器
事件偵聽器的用法是讓一個(gè)稱作偵聽器對象接收由其它對象(稱作廣播器對象)生成的事件,廣播器對象注冊偵聽器對象以接收由該廣播器生成的事件。例如,注冊影片剪輯對象以從舞臺(tái)接收 onResize 通知,或者按鈕實(shí)例可以從文本字段對象接收 onChanged 通知。注意可以注冊多個(gè)偵聽器對象以從一個(gè)廣播器接收事件,也可以注冊一個(gè)偵聽器對象以從多個(gè)廣播器接收事件。
事件偵聽器的事件模型類似于事件處理函數(shù)的事件模型,只是有以下兩個(gè)差別:
u 分配事件處理函數(shù)的對象不是發(fā)出該事件的對象。
u 調(diào)用廣播器對象的特殊方法 addListener(),該方法將注冊偵聽器對象以接收其事件。
這種事件處理的格式是:
偵聽器對象名.事件名稱 = function(){
程序代碼
};
廣播器名稱.addListener(偵聽器對象名);
理解:指定的偵聽器對象可以是任何對象,例如舞臺(tái)上的影片剪輯或按鈕實(shí)例,或者可以是任何動(dòng)作腳本類的實(shí)例。事件名稱是在廣播器上發(fā)生的事件,然后將該事件廣播到 listenerObject??梢韵蛞粋€(gè)事件廣播器注冊多個(gè)偵聽器。
事件偵聽器可用于以下動(dòng)作腳本類的對象:Key、Mouse、MovieClipLoader、Selection、TextField 和 Stage。
l 按鈕和影片剪輯事件處理函數(shù)
這類方法較為簡單,就是直接使用on()和onClipEvent()處理函數(shù)來響應(yīng)事件的發(fā)生。其格式是:
on(按鈕事件){
程序代碼
}
onClipEvent(影片剪輯事件){
程序代碼
}
可以使用的按鈕事件有:
press 在鼠標(biāo)指針經(jīng)過按鈕時(shí)按下鼠標(biāo)按鈕。
release 在鼠標(biāo)指針經(jīng)過按鈕時(shí)釋放鼠標(biāo)按鈕。
releaseOutside 當(dāng)鼠標(biāo)指針在按鈕之內(nèi)時(shí)按下按鈕后,將鼠標(biāo)指針移到按鈕之外,此時(shí)釋放鼠標(biāo)按鈕。
rollOut 鼠標(biāo)指針滑出按鈕區(qū)域。
rollOver 鼠標(biāo)指針滑過按鈕。
dragOut 在鼠標(biāo)指針滑過按鈕時(shí)按下鼠標(biāo)按鈕,然后滑出此按鈕區(qū)域。
dragOver 在鼠標(biāo)指針滑過按鈕時(shí)按下鼠標(biāo)按鈕,然后滑出此按鈕,再滑回此按鈕。
keyPress ("key") 按下指定的鍵。對于此參數(shù)的 key 部分,需指定鍵控代碼或鍵常量。
可以使用的電影剪輯事件有:
load 影片剪輯一旦被實(shí)例化并出現(xiàn)在時(shí)間軸中時(shí),即啟動(dòng)此動(dòng)作。
unload 在從時(shí)間軸中刪除影片剪輯之后,此動(dòng)作在第 1 幀中啟動(dòng)。在向受影響的幀附加任何動(dòng)作之前,先處理與 Unload 影片剪輯事件關(guān)聯(lián)的動(dòng)作。
enterFrame 以影片剪輯幀頻不斷觸發(fā)的動(dòng)作。首先處理與 enterFrame 剪輯事件關(guān)聯(lián)的動(dòng)作,然后才處理附加到受影響幀的所有幀動(dòng)作。
mouseMove 每次移動(dòng)鼠標(biāo)時(shí)啟動(dòng)此動(dòng)作。_xmouse 和 _ymouse 屬性用于確定當(dāng)前鼠標(biāo)位置。
mouseDown 當(dāng)按下鼠標(biāo)左鍵時(shí)啟動(dòng)此動(dòng)作。
mouseUp 當(dāng)釋放鼠標(biāo)左鍵時(shí)啟動(dòng)此動(dòng)作。
keyDown 當(dāng)按下某個(gè)鍵時(shí)啟動(dòng)此動(dòng)作。使用
Key.getCode() 獲取有關(guān)最后按下的鍵的信息。
keyUp 當(dāng)釋放某個(gè)鍵時(shí)啟動(dòng)此動(dòng)作。使用
Key.getCode() 方法獲取有關(guān)最后按下的鍵的信息。
data 當(dāng)在 loadVariables() 或 loadMovie() 動(dòng)作中接收數(shù)據(jù)時(shí)啟動(dòng)此動(dòng)作。當(dāng)與 loadVariables() 動(dòng)作一起指定時(shí),data 事件只在加載最后一個(gè)變量時(shí)發(fā)生一次。當(dāng)與 loadMovie() 動(dòng)作一起指定時(shí),獲取數(shù)據(jù)的每一部分時(shí),data 事件都重復(fù)發(fā)生。
7. ActionScript有關(guān)文本的知識(shí)
與ActionScript文本有關(guān)的知識(shí)可以通過下面的圖來認(rèn)識(shí):
8.
9. 總結(jié):類的分類
附錄A 演示與上機(jī)實(shí)習(xí)
特別說明:書附光盤的原程序整體打包在本課程網(wǎng)站上,本附錄的每個(gè)實(shí)例就不單獨(dú)提供下載了。
實(shí)例一 酷打字效果
¨ 實(shí)例效果:
酷打字效果¨ 學(xué)習(xí)理解要點(diǎn)
1.方法、函數(shù)、屬性和語句
創(chuàng)建對象:myObj = new Object()
創(chuàng)建文本格式對象:new TextFormat()
事件觸發(fā)處理函數(shù):myObj.onKeyDown
創(chuàng)建電影剪輯實(shí)例:_root.createEmptyMovieClip()
創(chuàng)建文本地段實(shí)例:myObj.createTextField()
刪除電影剪輯實(shí)例:removeMovieClip()
事件觸發(fā)處理函數(shù):Key.addListener()
事件觸發(fā)處理函數(shù):_root.onEnterFrame()
窗口消息輸出:trace()
2.知識(shí)
構(gòu)造事件觸發(fā)處理函數(shù)
一般對象屬性
當(dāng)前對象的指定this
¨ 實(shí)例程序
//創(chuàng)建一個(gè)新的對象myObj,注意Object對象位于類層次結(jié)構(gòu)的根處
myObj = new Object();
//定義尺寸大小為36的Times New Roman字體,顏色值為0x336666,
//同時(shí)字符加粗顯示
/*創(chuàng)建textformat對象,
構(gòu)造函數(shù)格式是:new TextFormat([font, [size, [color, [bold, [italic, [underline, [url, [target, [align, [leftMargin, [rightMargin, [indent, [leading]]]]]]]]]]]]])
textformat的屬性有:
font: 以字符串形式表示的文本字體名稱。
Size: 指示磅值的整數(shù)。
Color: 使用此文本格式的文本的顏色。包含三個(gè) 8 位 RGB 分量的數(shù)字;例如,0xFF0000 為紅色、0x00FF00 為綠色。
Bold: 指示文本是否為粗體的布爾值。
Italic: 指示文本是否為斜體的布爾值。
Underline: 指示文本是否帶有下劃線的布爾值。
url: 使用此文本格式的文本超鏈接到的 URL。如果 url 為空字符串,則表示文本沒有超鏈接。
target :顯示超鏈接的目標(biāo)窗口。如果目標(biāo)窗口為空字符串,則文本顯示在默認(rèn)目標(biāo)窗口 _self 中。如果 url 參數(shù)設(shè)置為空字符串或值 null,雖然可以獲取或設(shè)置此屬性,但該屬性不起作用。
Align:以字符串形式表示的段落對齊方式。如果為 "left",則段落為左對齊。如果為"center",則段落居中。如果為 "right",則段落為右對齊。
LeftMargin: 指示段落的左邊距,以磅為單位。
RightMargin:指示段落的右邊距,以磅為單位。
indent :一個(gè)整數(shù)指示從左邊距到段落中第一個(gè)字符的縮進(jìn)量。
Leading:一個(gè)數(shù)字,指示行與行之間的前導(dǎo)垂直間距量。
*/
myFormat = new TextFormat("Times New Roman",36,0x336666,true);
//當(dāng)鍵盤鍵按下時(shí)執(zhí)行function(){}花括號(hào)之間的內(nèi)容
myObj.onKeyDown = function() {
//i=i+1,i的初始值為0
i++;
//創(chuàng)建一個(gè)電影剪輯實(shí)例,其實(shí)例名是Li,深度是i
//構(gòu)造電影剪輯實(shí)例的格式:objectname.createemptymovieclip(“實(shí)例名”,深度)
//在根上創(chuàng)建電影剪輯,原點(diǎn)在左上角,深度確定了層的位置,注意根上最初的層深度為0,就是上面myObj原來有的那一層
_root.createEmptyMovieClip("L"+i,i);
//創(chuàng)建一個(gè)字體效果,其位置是在0,0 其寬度與高度都是60
//原注釋有錯(cuò)誤
//在電影剪輯Li(就是根的Li層上)使用創(chuàng)建文本字段的方法,創(chuàng)建新的文本字段對象實(shí)例,其名為”myText”,深度為1(就是存放1個(gè)字符),字段的位置分別為x=10,y=10(注意原點(diǎn)在左上角),字段的寬度和高度各為50
_root["L"+i].createTextField("myText",1,10,10,50,50);
//使用內(nèi)置對象Key的getAscii()方法獲取鍵盤上的一次按鍵,轉(zhuǎn)換成字符串后,賦值給第Li層的電影剪輯實(shí)例myText字段的text屬性
_root["L"+i].myText.text = chr(Key.getAscii());
//將第Li層的myText字段的文本格式設(shè)置成上面創(chuàng)建的myFormat對象的格式
_root["L"+i].myText.setTextFormat(myFormat);
//初始產(chǎn)生時(shí)的字體大小
_root["L"+i]._xscale = 600;
_root["L"+i]._yscale = 600;
//在trace窗口顯示"-------------"
trace("-------------");
//在trace窗口顯示x坐標(biāo)和y坐標(biāo)
trace(_root["L"+i]._x);
trace(_root["L"+i]._y);
//目標(biāo)字體的位置,一行有30個(gè)字符,每個(gè)字符間隔是20個(gè)點(diǎn)
//定義Li層的xTarget屬性:但I(xiàn)被30整除時(shí)等于0,否則等于15*t++
//yTarget屬性如此
_root["L"+i].xTarget = (i%30 = = 0) ? t=0 : 15*t++;
_root["L"+i].yTarget = (i%30 = = 0) ? ++j*15 : j*15;
//定義在發(fā)生onEnterFrame事件時(shí)(屬于第Li層)觸發(fā)的函數(shù)
_root["L"+i].onEnterFrame = function() {
//控制字體的位置,從當(dāng)前位置向后與向下偏60個(gè)點(diǎn),以70%的速度遞減
//注意這里第一次使用this
this._x += (this.xTarget+60-this._x)*.3;
this._y += (this.yTarget+60-this._y)*.3;
//控制字體的大小,按70%的速度遞減,直到40%的大小為止
this._xscale += (40-this._xscale)*.3;
this._yscale += (40-this._yscale)*.3;
}
//如果字符超過一百個(gè)就將字符上移100點(diǎn),其實(shí)就是相當(dāng)于字體移出視線
_root["L"+(i-100)].yTarget = -100;
//如果字符超過130個(gè)就將以前的字符刪除
//removeMovieClip()是刪除電影剪輯的方法
_root["L"+(i-130)].removeMovieClip();
}
//偵聽鍵盤按鍵
Key.addListener(myObj);
實(shí)例二 顯示字體列表
¨ 實(shí)例效果:
顯示字體列表¨ 學(xué)習(xí)理解要點(diǎn):
1.方法、函數(shù)、屬性和語句
文本字段對象:TextField
循環(huán)語句:for
條件執(zhí)行語句
2.知識(shí)
對象及其所屬的方法、屬性、事件觸發(fā)處理函數(shù)和偵聽觸發(fā)器
¨ 實(shí)例程序
//TextField對象是Object對象下的一個(gè)子對象,它的getFontlist()方法返回一個(gè)數(shù)組Array 對象,該對象的元素為 Flash Player 主機(jī)系統(tǒng)上所有字體(包括 SWF 文件和所有加載的資源 SWF 文件中的字體)的名稱。這些數(shù)組元素的類型為字符串類型。
//創(chuàng)建出來的userFonts對象實(shí)例具有TextField對象的全部方法、屬性、事件處理函數(shù)和偵聽器(共四大類,一般對象大都有這四大類的“東西”),例如:TextField.getDepth()(方法),TextField.length(屬性),TextField.onSetFocus(事件處理函數(shù)),TextField.onChanged(偵聽觸發(fā)器)。
userFonts = TextField.getFontList( );
//sort()是數(shù)組方法,作用是對其數(shù)組元素進(jìn)行排序
userFonts.sort( );
//createEmptyMovieClip()是實(shí)例一學(xué)習(xí)的內(nèi)容
_root.createEmptyMovieClip("fontList", i);
/*
for是循環(huán)語句,其格式是
for(循環(huán)變量初值;循環(huán)條件;步長){
循環(huán)體語句
}
這里的循環(huán)總次數(shù)等于顯示Flash swf的客戶端主機(jī)內(nèi)置字體的數(shù)量
*/
for (i=0; i<userFonts.length; i++) {
//創(chuàng)建一個(gè)新的動(dòng)畫片斷,包括相應(yīng)的字體內(nèi)容
//createTextField的知識(shí)見實(shí)例一
//(a,b, ,d,e)
_root.fontList.createTextField("userText"+i, i, 30, i*40, 300, 40);
//給第i層的電影剪輯fontListi的文本字段對象userTexti的text、border、background、backgroundcolor等屬性賦值
_root.fontList["userText"+i].text = userFonts[i];
_root.fontList["userText"+i].border = true;
_root.fontList["userText"+i].background = true;
_root.fontList["userText"+i].backgroundColor = 0xffff00;
//創(chuàng)建textformat對象的知識(shí)見實(shí)例一
//創(chuàng)建文本格式對象,繼承前面的文本格式對象userFonts[i],就是第i種字體的名稱,文本的長度為18。
displayStyle = new TextFormat(userFonts[i], 18);
//指定displayStyle實(shí)例的對齊屬性為”right”,靠右對齊
displayStyle.align = "right";
//這里的setTextFormat的格式是textfield.setTextFormat(開始位置,結(jié)束位置,套用格式)
//這里具體的就是將userTexti中的第1到第50位的字符套用到displyStyle的格式
_root.fontList["userText"+i].setTextFormat(1, 50, displayStyle);
//再創(chuàng)建文本格式對象userFontsi的一個(gè)實(shí)例(子對象)displyStyle_begin_char,字體名稱為userFontsi,長度為30
//textFormat構(gòu)造函數(shù)的用法見實(shí)例一
displayStyle_begin_char = new TextFormat(userFonts[i], 30);
//再定義displayStyle_begin_cha的對齊屬性為“right”
displayStyle_begin_char.align = "right";
//這里的setTextFormat的格式是textfield.setTextFormat(位置,套用格式)
//這里具體的就是將userTexti中的第0位的字符套用到displyStyle_begin_char的格式
_root.fontList["userText"+i].setTextFormat(0, displayStyle_begin_char);
}
//當(dāng)電影剪輯發(fā)生onEnterFrame事件時(shí),執(zhí)行{ }內(nèi)的語句
_root.onEnterFrame = function() {
/*這種條件執(zhí)行語句的格式是:(條件)?語句1:語句2
當(dāng)(條件)為真時(shí)(等于常量TRUE),執(zhí)行語句1,否則(條件為假,等于常量FALSE)執(zhí)行語句2
*/
/*_root._ymouse/_root._xmouse是鼠標(biāo)坐標(biāo)位置屬性,_root.fontList._y/_root.fontList._x是電影剪輯的原點(diǎn)坐標(biāo)屬性
注意這些坐標(biāo)屬性在賦值語句的右邊就是引用,在左邊是定義(賦值)
*/
/* 算術(shù)運(yùn)算符號(hào)“-=”和“+=”讀作“減等”和“加等”,其運(yùn)算意義是:x-=y等價(jià)于x=x-y,x+=y等價(jià)于x=x+y
*/
(_root._ymouse<200) ? _root.fontList._y -= (_root._ymouse-200)*.1 : _root.fontList._y += (200-_root._ymouse)*.1;
};
實(shí)例三 電視信號(hào)效果
¨ 實(shí)例效果:
電視信號(hào)效果¨ 學(xué)習(xí)理解要點(diǎn):
1.方法、函數(shù)、屬性和語句
構(gòu)造函數(shù):Function
數(shù)據(jù)返回語句:return
當(dāng)前對象操作語句:with
線型定義語句:LineStyle
光標(biāo)位置移動(dòng)語句:MoveTo
劃線語句:LineTo和CurveTo
隨機(jī)數(shù)產(chǎn)生語句:Random()
2.知識(shí)
函數(shù)的構(gòu)造方法和一般知識(shí)
函數(shù)的數(shù)據(jù)傳遞
¨ 實(shí)例程序
/*
構(gòu)造函數(shù)語句的格式是:
function 函數(shù)名(參數(shù)表){
函數(shù)體語句;
}
括號(hào)( )中間的傳遞參數(shù)表。
也可以這樣:
對象名.函數(shù)名=function 函數(shù)名(參數(shù)表){
函數(shù)體語句;
};
這樣創(chuàng)建的函數(shù)就是指定對象的函數(shù)了,如果構(gòu)造全局函數(shù),可以使用_global對象
函數(shù)的參數(shù)表是函數(shù)外向函數(shù)體內(nèi)傳遞數(shù)據(jù),從函數(shù)體內(nèi)向函數(shù)外部傳遞數(shù)據(jù)(叫返回值)的方法是使用return語句,其格式是:
return(參數(shù)表)
*/
function makeScratch (name, n, color, alpha, x, y, radius, ratio) {
/*
with語句的格式是:
with (對象名稱){
語句;
…
}
with語句的作用是說明with體內(nèi)的語句都是針對指定對象的,目的就是減少語句使用指定對象的名稱和路徑
*/
//this:當(dāng)前對象或位置
//createEmptyMovieClip()的格式意義見實(shí)例一
with (this.createEmptyMovieClip(name, n)) {
//畫一條透明度為alpha長度為線
//lineStyle是對象的方法,其作用是指定一種劃線的格式,供lineto和curveto等方法調(diào)用劃線,格式是:對象名.lineStyle(線的粗細(xì),rgb顏色,alpha),注意lineStyle()沒有劃線。
lineStyle(radius, color, alpha);
//moveTo(x,y)方法是將當(dāng)前(光標(biāo))位置移到(x,y)。
moveTo(x, y);
//lineTo(x,y)方法是從當(dāng)前(光標(biāo))位置畫一條線到(x,y)。當(dāng)然線的屬性由上面的lineStyle()方法定義。注意類似lineTo()方法,由curveTo()方法,大家到實(shí)際使用的時(shí)候才查閱flash的標(biāo)準(zhǔn)格式。
lineTo(x, y+(100/ratio));
}
};
//onEnterFrame事件見實(shí)例一、實(shí)例二的解釋
this.onEnterFrame = function() {
//產(chǎn)生20條這樣的灰色半透明的線
//for循環(huán)語句的知識(shí)見實(shí)例二。
for (r = 0; r<30; r++) {
//makeScratch調(diào)用了前面定義的函數(shù),注意括號(hào)里傳遞了8個(gè)數(shù)據(jù),其序列是和參數(shù)表對應(yīng)的。
//random()方法返回一個(gè)隨機(jī)整數(shù),形式是:random(n),返回的隨機(jī)整數(shù)在0和n-1之間。
//Stage.width和Stage.height照字面理解就是內(nèi)置對象(不需聲明的)寬度和高度。
makeScratch("b_"+r, 100+r, 0x999999, random(60), random(Stage.width), random(Stage.height), random(10), random(200));
}
};
實(shí)例四 往返光條效果
¨ 實(shí)例效果:
往返光條效果¨ 學(xué)習(xí)理解要點(diǎn):
1.方法、函數(shù)、屬性和語句
電影剪輯創(chuàng)建事件處理函數(shù):onClipEvent
語句:for
條件執(zhí)行語句:if
2.知識(shí)
事件觸發(fā)處理函數(shù)的意義和構(gòu)造方法
條件執(zhí)行語句的結(jié)構(gòu)
電影剪輯當(dāng)前位置的調(diào)整及其效果
¨ 實(shí)例程序
/*
onClipEvent是事件處理函數(shù),其格式為:
onClipEvent(movieEvent){
語句;
}
理解:當(dāng)onClipEvent()函數(shù)中指定的movieEvent事件發(fā)生時(shí),觸發(fā)運(yùn)行{ }中的語句。
MovieEvent的事件有以下幾種:
load:影片剪輯一旦被實(shí)例化并出現(xiàn)在時(shí)間軸中時(shí);
unload:在從時(shí)間軸中刪除影片剪輯之后;
enterFrame:影片進(jìn)入幀時(shí)(實(shí)際上這種事件是不斷發(fā)生的)
mouseMove:每次移動(dòng)鼠標(biāo)時(shí)(這時(shí)常常用到_xmouse 和 _ymouse 屬性來確定當(dāng)前鼠標(biāo)位置)
mouseDown:當(dāng)按下鼠標(biāo)左鍵時(shí)
mouseUp:當(dāng)釋放鼠標(biāo)左鍵時(shí)
keyDown:當(dāng)按下某個(gè)鍵時(shí)(這時(shí)可以使用Key.getCode 方法獲取最近按下的鍵)
keyUp:當(dāng)釋放某個(gè)鍵時(shí)(這時(shí)可以使用 Key.getCode 方法獲取最近按下的鍵)
data:當(dāng)在loadVariables 或loadMovie 動(dòng)作中接收數(shù)據(jù)時(shí)(當(dāng)與 loadVariables 動(dòng)作一起指定時(shí),data 事件只發(fā)生一次,即加載最后一個(gè)變量。當(dāng)與 loadMovie 動(dòng)作一起指定時(shí),獲取數(shù)據(jù)的每一部分時(shí),data 事件都重復(fù)發(fā)生。)
*/
onClipEvent (load) {
/*
_alpha、_x、_y、_xscale都是當(dāng)前對象this(當(dāng)前對象是電影剪輯)的屬性
random是產(chǎn)生隨機(jī)數(shù)的方法,詳見實(shí)例三
*/
this._alpha = 18;
this._x = random(490);
this._y = 70;
this._xscale = random(50)+20;
low = random(140);
high = 350+random(140);
move = 2*(3-random(6));
/*
if語句的格式:
if (邏輯表達(dá)式){
語句;
}
*/
if (move == 0) {
move = 3;
}
scale_move = 2*(3-random(6));
}
/*
onClipEvent(enterFrame)語句見本實(shí)例上面的解釋,注意enterFrame事件不斷發(fā)生
*/
onClipEvent (enterFrame) {
/*
下面的語句反復(fù)改動(dòng)this._x和this._xscale就可以是光條的位置發(fā)生變化,看上去就好象光條在移動(dòng)
*/
this._x += move;
this._xscale += scale_move;
if (_xscale>200 or _xscale<20) {
scale_move = -scale_move;
}
if ((this._x>high and move>0) or (this._x<low and move<0)) {
move = -move;
}
}
實(shí)例五 閃亮的圓環(huán)
¨ 本講義不對本實(shí)例作注釋了。
¨ 實(shí)例效果:
閃亮的圓環(huán)¨ 學(xué)習(xí)理解要點(diǎn):
¨ 實(shí)例程序(該實(shí)例的程序嵌入的載體不止一處,無法在此簡單標(biāo)出,請參閱源程序)
實(shí)例六 MP3播放器
¨ 注意
1.本課程下載的原程序沒有包含5個(gè)mp3文件,大家可以自己找5個(gè)mp3文件復(fù)制到原程序所在的目錄下,將mp3文件重命名為1.mp3,2.mp3,3.mp3,4.mp3,5.mp3就可以了。
2.本實(shí)例原文件的庫中包含了沒有使用的圖符,而在第一幀中使用的2個(gè)按鈕實(shí)例在庫中的原型是symbol 3。
¨ 實(shí)例效果:
MP3播放器¨ 學(xué)習(xí)理解要點(diǎn):
1.方法、函數(shù)、屬性和語句
未定義常量:undefined
聲音對象構(gòu)造函數(shù):new sound()
獲取外部聲音文件:mysound.loadsound()
聲音對象播放屬性:mySound.position和mySound.duration
整數(shù)轉(zhuǎn)換到字符串方法:parseInt()
數(shù)組構(gòu)造函數(shù):new array()
數(shù)組長度屬性:myArray.length
文本字段構(gòu)造函數(shù):myTextField.setNewTextField
字符串拆分方法:myString.split()
電影剪輯劃線清除方法:_root.clear()
按鈕事件處理函數(shù)定義:myButton.onPress
2.知識(shí)
undefined常量
聲音對象的構(gòu)造、屬性、方法等
全局變量及_global
數(shù)組變量及其使用方法
按鈕事件處理函數(shù)的定義使用
¨ 實(shí)例程序
function playSong() {
//播放聲音函數(shù)
/*undefined是一個(gè)很特殊的常數(shù),通常用于指示出沒有賦值過的變量。
例如:typeof(a)為undefined;而a=typeof(undefined),a=”undefined”;又(undefined==null)=true
*/
songIndex = (songIndex == undefined) ? 0 : songIndex;
/*
聲音對象使用前必須new一下,其構(gòu)造函數(shù)是:聲音對象名=new sound(target);。target是指定的電影剪輯,如果沒有指定電影剪輯,則聲音對象控制全部電影剪輯的聲音
sound對象和其它對象一樣,有屬性、方法和事件觸發(fā)函數(shù)。
*/
dongua_sound = new Sound();
//當(dāng)歌曲播放結(jié)束時(shí)換一首歌
//聲音對象.onSoundComplete是事件觸發(fā)函數(shù),當(dāng)聲音播放完成時(shí)觸發(fā)。
dongua_sound.onSoundComplete = changeSong;
//取外部聲音文件
//fileList[songIndex]是數(shù)組fileList的元素,數(shù)組的解釋見下面。
currentFile = fileList[songIndex];
/*聲音對象.loadSound( )是從電影剪輯之外加載聲音文件的方法,其格式是:聲音對象.loadSound(URL, isStreamSound);
其中URL指定外部聲音所在的URL,isStreamSound為TRUE或FALSE,為TRUE時(shí),表示加載的聲音是聲音流(既一邊加載一邊開始播放),為FALSE時(shí),表示是事件聲音(既要完全加載到內(nèi)存后才能開始播放)。
這里聲音對象是聲音流,所以程序運(yùn)行到這里聲音就開始播放了。
*/
dongua_sound.loadSound(currentFile, true);
}
function changeSong() {
/*
用fileList.length整除一下++songIndex是使聲音播放超過5首之后又返回到第1首,實(shí)現(xiàn)循環(huán)播放。
fileList.length是數(shù)組fileList的長度屬性。
*/
songIndex = (++songIndex)%fileList.length;
playSong();
}
/*
1.下面的語句是定義全局變量formatTime及其定義函數(shù)。
2.全局變量的構(gòu)造函數(shù)格式是:_global.變量名
3._global下的全局變量只要不被內(nèi)部范圍的同名變量遮蔽,整個(gè)電影的各個(gè)電影剪輯(包括層和時(shí)間線)都是可見的,也就是說可以引用的。
*/
_global.formatTime = function(milliseconds) {
//取聲音的分鐘數(shù)
//parseInt( )是將括號(hào)內(nèi)的整數(shù)轉(zhuǎn)換成字符串。注意另有變化,詳見后面的解釋。
var s = "00"+parseInt(milliseconds/1000%60);
//s.substr(s.length()-2 )等于取字符串s最后2位子字串。注意操作完成后,字符串s沒有變化。
return parseInt(milliseconds/1000/60)+":"+s.substr(s.length()-2);
};
//播放進(jìn)度的開始位置
begin_x = 100;
begin_y = 130
/*下面的語句是在當(dāng)前電影剪輯下創(chuàng)建一個(gè)新的文本字段。
1.構(gòu)造函數(shù)的格式是:電影剪輯名.createTextField(文本字段實(shí)例名,深度,x,y,寬度,高度);
2.深度是指文本字段的字符數(shù)。
*/
this.createTextField("txtDisplay", 2, begin_x, begin_y, 300, 20);
/*下面的語句是指定一個(gè)文本字段的格式屬性,與實(shí)例一中介紹的createTextField()方法類似
1.格式是:文本字段實(shí)例名.setNewTextFormat(屬性1,屬性2,…,屬性n),屬性表的具體內(nèi)容未詳,可能是字體名稱、磅值、顏色、關(guān)聯(lián) URL、左邊距、右邊距、首行縮進(jìn)、對齊方式;
*/
txtDisplay.setNewTextFormat(new TextFormat("_sans", null, null, true, null, null, null, null, "center"));
//播放器列表
/*下面的語句定義數(shù)組fileList。
數(shù)組使用之前需要new一下或直接定義數(shù)組元素,數(shù)組元素之間使用逗號(hào)格開,數(shù)組的編號(hào)是從0開始到N-1的。
*/
fileList = ["1.mp3", "2.mp3", "3.mp3", "4.mp3", "5.mp3"];
//調(diào)用前面定義的playSong()函數(shù)
playSong();
_root.onEnterFrame = function() {
//顯示歌曲的名稱
/*
字符串.split()方法是拆分指定的字符串,結(jié)果放到一個(gè)數(shù)組中,具體的格式是:
格式:字符串.split(“拆分字符”,項(xiàng)數(shù))
例子:
myString=“I am a teacher.”;
a=myString.split(“ ”, 3);
結(jié)果是:a[0]=”I”,a[1]=”am”,a[2]=”a”
*/
this.txtDisplay.text = "NOW PLAYING: "+currentFile.split(".")[0];
//顯示歌曲的進(jìn)度及總長度
/*
sound.position是取得聲音已經(jīng)播放的毫秒數(shù);
sound.duration是取得聲音的總長度,也是毫秒數(shù)。
*/
this.txtDisplay.text += " ("+formatTime(dongua_sound.position)+" / "+formatTime(dongua_sound.duration)+")";
//用直線線段顯示播放比例
/*
_root.clear()是刪除與電影剪輯關(guān)聯(lián)的全部繪畫之前的設(shè)置;
_root.lineStyle/_root.lineTo/_root.moveTo等都是劃線相關(guān)的方法,詳見實(shí)例三和實(shí)例四。
*/
_root.clear();
_root.moveTo(begin_x, begin_y+10);
_root.lineStyle(20, 0x8080FF, 100);
_root.lineTo(300*(dongua_sound.position/dongua_sound.duration)+begin_x, begin_y+10);
_root.lineStyle(20, 0x8080FF, 25);
_root.lineTo(begin_x+300, begin_y+10);
};
/*
1. 在原實(shí)例文件中,將2個(gè)按鈕組合在一起,需要取消其組合,才能看到每一個(gè)按鈕的屬性;
2. prev和下面的back是該實(shí)例中在舞臺(tái)上的按鈕實(shí)例,
3. onPress是事件處理函數(shù),其格式是:
按鈕名.onPress = function(){
語句;
};
當(dāng)按鈕被按下時(shí),觸發(fā)后面的函數(shù)。
*/
prev.onPress = function() {
//播放下一首
songIndex = (++songIndex)%fileList.length;
//sound.stop( )按照字面理解,就是聲音對象的停止播放方法啦。
dongua_sound.stop();
playSong();
};
//這段程序的理解,參照上面一段的解釋說明。
back.onPress = function() {
//播放上一首
songIndex = (--songIndex)%fileList.length;
if (songIndex<0) {
songIndex = fileList.length-1;
}
dongua_sound.stop();
playSong();
};
實(shí)例七 遞歸畫方格線
¨ 實(shí)例效果:
遞歸畫方格線¨ 學(xué)習(xí)理解要點(diǎn):
1.方法、函數(shù)、屬性和語句
清除繪圖格式:this.clear()
數(shù)學(xué)對象方法:math.floor()
數(shù)學(xué)對象方法:math.random()
運(yùn)算符:<<,>>,&&
數(shù)組方法:myArray.shift()
數(shù)組方法:myArray.push()
2.知識(shí)
創(chuàng)建對象的一般格式
¨ 實(shí)例程序
//stage.scaleMode = "noScale";
init = function () {
// 創(chuàng)建一個(gè)新的文本框,同時(shí)清空它
//createTextField的意義和用法見實(shí)例一
_root.createTextField("dongua", 1, 160, 340, 120, 20);
//””為空值
dongua.text = "";
//this.clear()清除當(dāng)前電影剪輯所有繪圖命令的格式
this.clear();
// cc1左移7位,相當(dāng)于乘以64,左移12位相當(dāng)于乘以4096
//math.floor:是數(shù)學(xué)對象math的floor方法,格式是:math.floor(x),作用是返回最接近x的最小整數(shù)(將x取整)。
//Math.random()是數(shù)學(xué)對象math的random方法,格式是:math.random(),作用是返回一個(gè)0到1之間的隨機(jī)小數(shù)或0,注意括號(hào)內(nèi)沒有參數(shù)。
//符號(hào)“<<”是按位左移(當(dāng)然“>>”就是右移了),其格式是:表達(dá)式1<<表達(dá)式2,其操作過程是先將表達(dá)式1和表達(dá)式2轉(zhuǎn)換位32位的二進(jìn)制數(shù)(不足位數(shù)的以0填滿),然后將表達(dá)式1左移表達(dá)式2位,表達(dá)式1左移后右邊的位置以0填滿。在數(shù)學(xué)上,左移n位等于乘于2的n次方。
//例如:6<<3最后結(jié)果是48。
//同理,右移n位的結(jié)果是將被右移的數(shù)除于2的n次,再去掉余數(shù)。
cc1 = Math.floor(Math.random()*256) << 6;
cc2 = Math.floor(Math.random()*256) << 16;
// 這里的(x,y)表示要畫格子的中心點(diǎn)坐標(biāo),a代表寬度,c1-c4代表四個(gè)區(qū)的顏色
//創(chuàng)建對象的一種格式是:myObj={name1:value1,…,nameN:valueN};
//含義是定義對象myObj的第一個(gè)屬性的屬性名為name1,其值為value1…。
//具體在數(shù)組的創(chuàng)建時(shí),可以寫成:new myArray({element1:value1,…,elementN:valueN});
table = new Array({x:200, y:200, a:256, c1:cc1, c2:cc2, c3:cc2*2, c4:cc1/4});
};
//init()函數(shù)就是前面定義的,它屬于_root。
_root.init();
_root.onEnterFrame = function() {
//這里的1024代表這些線分割的小方塊數(shù)目
//這里的“&&”叫做短路AND,其算法就是我們一般所指的AND。
if (table.length<1024 && dongua.text == "") {
//取出一個(gè)節(jié)點(diǎn)然后再線
//myArray.shift()是數(shù)組的方法,其作用是取出數(shù)組的第一個(gè)元素,然后刪除其在數(shù)組中的位置。在這里執(zhí)行完該語句后,t變量就等于table的第一個(gè)元素的值,table數(shù)組比原來少了一個(gè)元素。
t = table.shift();
cc = Math.floor((2*t.c1+3*t.c2+4*t.c3)/6);
_root.lineStyle(2, cc, 100);
_root.moveTo(t.x-t.a/2, t.y);
_root.lineTo(t.x+t.a/2, t.y);
_root.moveTo(t.x, t.y-t.a/2);
_root.lineTo(t.x, t.y+t.a/2);
//將四個(gè)區(qū)塊入棧,這樣設(shè)置顏色可以保證對角的顏色相同
//push()是數(shù)組的方法,其格式是:myVar=myArray.push(element1:value1,…,elementN:valueN),其作用是將N個(gè)元素添加到數(shù)組的結(jié)尾,并返回該數(shù)組的新長度。
table.push({x:t.x-t.a/4, y:t.y-t.a/4, a:t.a/2, c1:t.c2, c2:t.c3, c3:t.c1, c4:cc});
table.push({x:t.x-t.a/4, y:t.y+t.a/4, a:t.a/2, c1:t.c4, c2:t.c2, c3:t.c1, c4:cc});
table.push({x:t.x+t.a/4, y:t.y-t.a/4, a:t.a/2, c1:t.c4, c2:t.c2, c3:t.c1, c4:cc});
table.push({x:t.x+t.a/4, y:t.y+t.a/4, a:t.a/2, c1:t.c2, c2:t.c3, c3:t.c1, c4:cc});
} else {
dongua.text = "按鼠標(biāo)重新開始";
_root.onMouseDown = function() {
//嵌套調(diào)用_root.init()函數(shù),使再畫方格
_root.init();
};
}
};
實(shí)例八 麥克風(fēng)的控制
¨ 實(shí)例效果:
麥克風(fēng)的控制¨ 學(xué)習(xí)理解要點(diǎn):
1.方法、函數(shù)、屬性和語句
連接麥克風(fēng)電影剪輯: attaechAudio()
創(chuàng)建麥克風(fēng)實(shí)例:Microphone.get()
設(shè)置麥克風(fēng)回音方法:setUseEchoSuppression()
設(shè)置麥克風(fēng)增益方法:setGain()
設(shè)置麥克風(fēng)頻率方法:setRate()
獲取麥克風(fēng)音量屬性:activityLevel
2.知識(shí)
理解麥克風(fēng)對象
¨ 實(shí)例程序
//本實(shí)例使用的與麥克風(fēng)有關(guān)的對象、方法和屬性并沒有出現(xiàn)在FLASH動(dòng)作面板之中,具體的內(nèi)容見參考書P63-67。
_root.createEmptyMovieClip("mic", 1);
//連接電影剪輯與麥克風(fēng)對象,用于存放麥克風(fēng)實(shí)例對象,格式為:_root.micname.attechAudio(Microphone.get())。
_root.mic.attachAudio(Microphone.get());
//創(chuàng)建麥克風(fēng)實(shí)例myMic
_root.myMic = Microphone.get();
//設(shè)置麥克風(fēng)回音狀態(tài)
_root.myMic.setUseEchoSuppression(1);
//設(shè)置麥克風(fēng)增益功率
_root.myMic.setGain(100)
//設(shè)置采樣頻率
// 設(shè)置麥克風(fēng)采樣頻率,一般麥克風(fēng)可以采樣的值是:5,8,11,22,44
_root.myMic.setRate(44);
this.onEnterFrame = function() {
//返回麥克風(fēng)的音量從-1至100
// activitylevel是只讀屬性,不能設(shè)置,所以在程序中設(shè)計(jì)了一個(gè)輸出語句。
// 如果沒有插入麥克風(fēng),level值等于0,畫出來的只是一個(gè)簡單的8邊形。并沒有多個(gè)8邊形。
level = _root.myMic.activityLevel;
trace(level);
//控制大小變化的速度
osci += ((level)+1)/1;
if (osci>360) {
osci = 0;
}
//控制周圍的多邊形與中心的那個(gè)之間的距離
ml = (0-level)/6;
radius = Math.sin(osci*Math.PI/180)*(ml+100);
rotation += (level)/2+1;
this.clear();
//多邊形的邊數(shù)
angle = 8;
for (j=0; j<angle; j++) {
xradius = Math.cos((j*360/angle)*Math.PI/180)*ml*(radius/angle);
yradius = Math.sin((j*360/angle)*Math.PI/180)*ml*(radius/angle);
this.lineStyle(level/3, "0xffffff");
x = Math.cos((arcAngle+rotation)*Math.PI/180)*radius;
y = Math.sin((arcAngle+rotation)*Math.PI/180)*radius;
this.moveTo(x+250+(xradius), y+200+(yradius));
//畫中心的等邊形的邊
for (i=1; i<angle+1; i++) {
x = Math.cos(((i*(360/angle))+rotation)*Math.PI/180)*radius;
y = Math.sin(((i*(360/angle))+rotation)*Math.PI/180)*radius;
this.lineTo(x+250+(xradius), y+200+(yradius));
}
}
};
stop();
// 以下語句只是練習(xí)
_root.createEmptyMovieClip("mic2", 1);
_root.mic2.attachAudio(Microphone.get());
_root.myMic2 = Microphone.get();
//設(shè)置采樣頻率
_root.myMic2.onEnterFrame = function() {
}
// 以上語句只是練習(xí)
實(shí)例九 血管特效
¨ 實(shí)例效果:
血管特效¨ 學(xué)習(xí)理解要點(diǎn):
1.方法、函數(shù)、屬性和語句
設(shè)置舞臺(tái)縮放屬性: stage.scaleMode
預(yù)先遞增:++
清除對象語句:delete
2.知識(shí)
變量連續(xù)賦值
數(shù)學(xué)常數(shù)
數(shù)學(xué)方法:Math.sin、Math.con
¨ 實(shí)例程序
//stage.scaleMode是定義舞臺(tái)的縮放屬性,格式是:stage.scaleMode=“value”,其中value可以使用值有 "exactFit"、"showAll"、"noBorder" 和 "noScale"。如果不對stage.scaleMode屬性進(jìn)行指定的話,取默認(rèn)值showAll。
Stage.scaleMode = "noScale";
//actionscript允許連續(xù)賦值,如下語句
this._x = this._y=200;
this.onEnterFrame = function() {
//最多產(chǎn)生1000根血管線
//time是沒有預(yù)先聲明而直接引用的變量,在初始情況下,它是undefined,經(jīng)過++運(yùn)算(叫預(yù)先遞增)后,變?yōu)?、2、3、…(注意理解onEnterFrame是不斷發(fā)生的)
if (++time<1000) {
//血管生長的角度,在上一次生長角度正負(fù)25度之間波動(dòng)
//Math.PI是數(shù)學(xué)常數(shù),為3.14159265358979…
t += (Math.PI/180*(25-random(50)));
//血管的長度是20-50
len = random(30)+20;
//根據(jù)上次血管的位置計(jì)算新血管的位置,讓血管可以無限的延伸
//Math.sin和Math.cos照字面理解即可
this._x -= ((x1=x+len*Math.sin(t))-x);
this._y -= ((y1=y+len*Math.cos(t))-y);
//用一種隨機(jī)深紅色來畫血管
//this.lineStyle和this.lineTo是定義劃線和劃線方法,見前面的實(shí)例
this.lineStyle(3, "0x"+(random(102)+51).toString(16)+"0000", 50);
this.lineTo((x=x1), (y=y1));
//以20%的概率畫血管的分支
if (random(100)<=20) {
//branch()是調(diào)用下面定義的函數(shù)
branch(x, y, t);
}
}
};
function branch(x, y, t) {
//這里創(chuàng)建的電影剪輯的名字是"branch"+(++bc%1000),具體就是先計(jì)算出++bc(就是1、2、3、…)然后整除以1000取余數(shù)(還是1、2、3、…,到1000以后,從1重新開始),然后字符串“branch”與1、2、3、…連接。
//注意逗號(hào)后面的bc是經(jīng)過前面++(預(yù)先遞增)的。
_root.createEmptyMovieClip("branch"+(++bc%1000), bc);
_root["branch"+bc]._x = x;
_root["branch"+bc]._y = y;
//分支血管的角度
_root["branch"+bc].t = t;
_root["branch"+bc].onEnterFrame = function() {
//讓分支角度在正負(fù)30度之間變動(dòng)
this.t += (Math.PI/180*(30-random(60)));
//長度是20-50之間
this.len = random(30)+20;
//比主血管細(xì)一些,線只有一個(gè)點(diǎn)的寬度,顏色是有所有不同的血紅色
this.lineStyle(1, "0x"+(random(150)+100).toString(16)+"0000", 50);
this.x += this.len*Math.sin(this.t);
this.y += this.len*Math.cos(this.t);
this.lineTo(this.x, this.y);
//有的細(xì)血管長,有的短,通過刪除時(shí)間早晚不同的方式來控制
//為了節(jié)約系統(tǒng)資源,在停止畫分支時(shí)要清除它的onEnterframe事件函數(shù)
if (++this.n>random(15)+5) {
//delete是運(yùn)算符,但是使用起來看上去像一條語句,其格式是delete r,其中r是對象、屬性或變量等,其作用是刪除指定的對象、屬性或變量,釋放其占用的空間。
/*
delete運(yùn)算是非常有用的,我們可以從下面的示例體會(huì)到它的用途。
示例一:
ref1 = new Object();
ref1.name = "Jody";
ref2 = ref1;
delete ref1;
示例二
account = new Object();
account.name = 'Jon';
delete account.name;
*/
delete this.onEnterFrame;
}
};
}
實(shí)例十 虛幻實(shí)境
¨ 實(shí)例效果:
虛幻實(shí)境¨ 學(xué)習(xí)理解要點(diǎn):
1.方法、函數(shù)、屬性和語句
設(shè)置舞臺(tái)質(zhì)量屬性:_quality
設(shè)置舞臺(tái)尺寸屬性:Stage.width、Stage.height
電影剪輯填充方法:beginFill()、endFill()
刪除電影剪輯方法:removeMovieClip()
2.知識(shí)
數(shù)學(xué)運(yùn)算符:||
¨ 實(shí)例程序
//在低分辮率下運(yùn)算會(huì)快些,才能產(chǎn)生出朦朧美
//_quality是舞臺(tái)的屬性,用于設(shè)置或獲取影片的播放質(zhì)量。其格式是_quality = swf_quality,其中swf_quality可以選擇的字符串有“LOW”、“MEDIUM”、“HIGH”、“BEST”。
//其實(shí)_quality屬性定義的就是在flash導(dǎo)出電影時(shí)的quality屬性。
_quality = "LOW";
//產(chǎn)生用來控制的點(diǎn)
for (i=1; i<=8; i++) {
_root.createEmptyMovieClip("point"+i, i+10);
//Stage.width和Stage.height按照字面理解,就是舞臺(tái)的寬和高。
_root["point"+i]._x = Stage.width/2;
_root["point"+i]._y = Stage.height/2;
//控制點(diǎn)的位置在正負(fù)五個(gè)點(diǎn)之內(nèi)變化
//_root["point"+i].xVel =…是創(chuàng)建該電影剪輯的一個(gè)屬性(變量)xVel,同理yVel。
_root["point"+i].xVel = Math.floor(Math.random()*10)-5;
_root["point"+i].yVel = Math.floor(Math.random()*10)-5;
_root["point"+i].onEnterFrame = function() {
this._x += this.xVel;
this._y += this.yVel;
//這兩句保證控制點(diǎn)在超出視野時(shí)就要回頭反向移動(dòng)
/*邏輯或運(yùn)算符號(hào)“||”是這樣使用的:(假定計(jì)算式為A||B)
第一種情況:A、B均為邏輯表達(dá)式,當(dāng)A、B其中有一項(xiàng)為TRUE時(shí),結(jié)果為TRUE,這就是是一般情況下的邏輯或運(yùn)算了(OR)。
第二種情況:A、B為非邏輯表達(dá)式,如果A表達(dá)式最終可以轉(zhuǎn)換為TRUE,則結(jié)果為TRUE,否則結(jié)果就是B的值。
語句(A ? B : C)是條件語句,具體的意義見前面的例子。
*/
this._x<0 || this._x>Stage.width ? this.xVel *= -1 : this.xVel;
this._y<0 || this._y>Stage.height ? this.yVel *= -1 : this.yVel;
};
}
//定義顏色
values = new Array("0", "2", "4", "6", "8", "A", "C", "D");
//定義_root的一個(gè)新的屬性hexColor
// 每項(xiàng)Math.floor(Math.random()*values.length)都是一個(gè)0到7的一個(gè)隨機(jī)整數(shù)。
//等號(hào)右邊最后結(jié)果是一個(gè)字符串,例如:“0x46046A”。
_root.hexColor = "0x"+values[Math.floor(Math.random()*values.length)]+values[Math.floor(Math.random()*values.length)]+values[Math.floor(Math.random()*values.length)]+values[Math.floor(Math.random()*values.length)]+values[Math.floor(Math.random()*values.length)]+values[Math.floor(Math.random()*values.length)];
//產(chǎn)生變形
i = 1;
_root.onEnterFrame = function() {
name = "dongua_shape_"+i;
_root.createEmptyMovieClip(name, i+20);
/*
beginFill()是電影剪輯的一種方法,格式是myMovieClip.beginFill (A, B),其中A是RGB顏色的表達(dá)式,B是ALPHA的表達(dá)式,作用是指示填充位置開始。
EndFill()也是電影剪輯的一種方法,格式是myMovieClip.endFill(),作用是指示填充位置結(jié)束。
填充的區(qū)域從beginFill()開始,endFill()結(jié)束,期間由lineTo()、curveTo()產(chǎn)生的那些線段,如果那些線段是沒有閉合的,由起點(diǎn)到終點(diǎn)自動(dòng)閉合。
*/
_root[name].beginFill(_root.hexColor, 3);
_root[name].moveTo(_root.point1._x, _root.point1._y);
_root[name].curveTo(_root.point2._x, _root.point2._y, _root.point3._x, _root.point3._y);
_root[name].curveTo(_root.point4._x, _root.point4._y, _root.point5._x, _root.point5._y);
_root[name].curveTo(_root.point6._x, _root.point6._y, _root.point7._x, _root.point7._y);
_root[name].curveTo(_root.point8._x, _root.point8._y, _root.point1._x, _root.point1._y);
_root[name].endFill();
//移去以前的區(qū)域,僅保留最新的50個(gè)區(qū)域
//removeMovieClip( )是移除指定的電影剪輯,格式是:removeMovieClip(“movieclipName”)
removeMovieClip(_root["dongua_shape_"+(i-50)]);
i++;
};
實(shí)例十一 天堂之云
¨ 實(shí)例效果:
天堂之云¨ 學(xué)習(xí)理解要點(diǎn):
1.方法、函數(shù)、屬性和語句
電影剪輯填充方法:beginGrandianFill()、endFill()
電影剪輯顯示屬性:myMovieClip._visible
電影剪輯復(fù)制方法:duplicateMovieClip()
2.知識(shí)
¨ 實(shí)例程序
//_quality是屬于舞臺(tái)的屬性,具體含義和選項(xiàng)見實(shí)例十
_quality = "LOW";
begin_x = 70;
begin_y = 250;
y_move_speed = 4;
//先產(chǎn)生一個(gè)空白的填充效果
createEmptyMovieClip("dongua_sparkle", 100);
//with語句的意義見實(shí)例三
with (_root.dongua_sparkle) {
/*
1. 類似beginFill(),beginGradiantFill()也是電影剪輯的方法,作用也是填充某個(gè)區(qū)域,但是是以漸變的顏色填充的。格式是:myMovieClip.beginGradienFill(A,B,C,D,E)。
A:填充類型,字符串,有“l(fā)inear”(線性漸變)與“radial”(中心放射漸變);
B:節(jié)點(diǎn)顏色,數(shù)組(數(shù)組長度就是節(jié)點(diǎn)個(gè)數(shù)了),RGB形式數(shù)據(jù);
C:節(jié)點(diǎn)顏色的ALPHA值,數(shù)組(數(shù)據(jù)的長度與B一樣),取值范圍是0-100,小于0時(shí)使用0,大于100時(shí)使用100;
D:顏色比例,數(shù)據(jù),取值范圍是0-255,該值按 100% 定義了對顏色進(jìn)行采樣處的寬度的百分比。
E:是數(shù)組,有兩種形式,第一種是{a,b,c,d,e,f,g,h,I},第二種是{matrixType:”box”,b,c,d,e,f},該參數(shù)的作用是: 。
2. 和beginFilee()語句一樣,beginGradianFill()方法與endFill()配合使用,填充的區(qū)域由其中的lineTo()、curveTo()方法劃出來的線段確定。
*/
beginGradientFill("radial", [0xffffff, 0xffffff], [100, 0], [0, 255], {matrixType:"box", x:0, y:0, w:20, h:20, r:0});
//順時(shí)針畫個(gè)圓,然后用前面的定義的白色漸變色填充
moveTo(10, 0);
curveTo(20, 0, 20, 10);
curveTo(20, 20, 10, 20);
curveTo(0, 20, 0, 10);
curveTo(0, 0, 10, 0);
endFill();
}
//這里的tabX與tabY分別代表一個(gè)圓的圓心位置,共有20個(gè)圓
arrays = {tabX:[], tabY:[250, 210, 440, 400, 350, 220, 350, 260, 340, 400, 250, 210, 440, 400, 350, 220, 350, 260, 340, 400]};
//_visible屬性是電影剪輯的顯示屬性,格式是myMovieClip._visible,取值范圍是TRUE或FALSE。
dongua_sparkle._visible = false;
_root.onEnterFrame = function() {
for (i=0; i<20; i++) {
name = "dongua_sparkle_"+i;
//duplicateMovieClip方法是復(fù)制電影剪輯,格式是duplicateMovieClip(a,b,c),a是源電影剪輯,b是目標(biāo)電影剪輯,c是目標(biāo)電影剪輯的深度(層編碼)。
duplicateMovieClip(dongua_sparkle, name, i);
_root[name]._x = arrays.tabX[i];
_root[name]._y = arrays.tabY[i];
_root[name]._xscale = 4*arrays.tabX[i];
_root[name]._yscale = 4*arrays.tabY[i];
_root[name]._alpha = arrays.tabY[i]/6;
//讓云彩往上飄移動(dòng)方式以cos函數(shù)為基準(zhǔn),每次移動(dòng)距離很小
arrays.tabY[i] = arrays.tabY[i]-y_move_speed/2*Math.cos(angle-i)-y_move_speed;
//如果云彩的中心小于5時(shí)就重新從下面開始
if (arrays.tabY[i]<5) {
arrays.tabY[i] = begin_y;
}
//云彩的X坐標(biāo)變化值是以sin函數(shù)為基準(zhǔn)
//Math.sin()是Math對象的方法。
arrays.tabX[i] = begin_x+(30*Math.sin(angle-i));
//調(diào)整角度
angle = angle+0.002;
}
};
實(shí)例十二 3D物體的旋轉(zhuǎn)
¨ 實(shí)例效果:
3D物體的旋轉(zhuǎn)¨ 學(xué)習(xí)理解要點(diǎn):
1.方法、函數(shù)、屬性和語句
電影剪輯停止方法:stop()
2.知識(shí)
¨ 實(shí)例程序
function init() {
_root.createEmptyMovieClip("pad", 1);
pad._x = 270;
pad._y = 200;
}
//Math.PI是數(shù)學(xué)常量
ya = Math.PI;
fl = 150;
x = new Array(-100, 100, 100, -100, -100, 100, 100, -100);
y = new Array(-100, -100, 100, 100, -100, -100, 100, 100);
z = new Array(-100, -100, -100, -100, 100, 100, 100, 100);
xp = new Array();
yp = new Array();
function square(x1, y1, x2, y2, x3, y3, x4, y4, col) {
//beginFill()和endFill()方法見實(shí)例十一
pad.beginFill(col, 50);
pad.lineStyle(1, 0, 100);
pad.moveTo(x1, y1);
pad.lineTo(x2, y2);
pad.lineTo(x3, y3);
pad.lineTo(x4, y4);
pad.lineTo(x1, y1);
pad.endFill();
}
_root.onEnterFrame = function() {
//調(diào)用前面定義的init()函數(shù)
init();
cosxa = Math.cos(xa);
sinxa = Math.sin(xa);
cosya = Math.cos(ya);
sinya = Math.sin(ya);
xa += pad._ymouse/1000;
ya += pad._xmouse/1000;
for (i=0; i<8; i++) {
ypt = cosxa*y[i]-sinxa*z[i];
zpt = cosxa*z[i]+sinxa*y[i];
xpt = cosya*x[i]-sinya*zpt;
zpt = cosya*zpt+sinya*x[i];
scale = fl/(fl+zpt+200);
xp[i] = xpt*scale;
yp[i] = ypt*scale;
}
square(xp[0], yp[0], xp[1], yp[1], xp[2], yp[2], xp[3], yp[3], 0xff0000);
square(xp[0], yp[0], xp[3], yp[3], xp[7], yp[7], xp[4], yp[4], 0x00ff00);
square(xp[4], yp[4], xp[5], yp[5], xp[6], yp[6], xp[7], yp[7], 0x0000ff);
square(xp[1], yp[1], xp[2], yp[2], xp[6], yp[6], xp[5], yp[5], 0xff00ff);
square(xp[0], yp[0], xp[1], yp[1], xp[5], yp[5], xp[4], yp[4], 0xffff00);
square(xp[2], yp[2], xp[3], yp[3], xp[7], yp[7], xp[6], yp[6], 0x00ffff);
};
_root.onMouseDown = function() {
//定義了_root下的一個(gè)屬性,但是沒有起作用。下同
//有什么作用?
_root.draw = true;
};
_root.onMouseUp = function() {
_root.draw = up;
};
//stop()是電影剪輯的方法,格式是:myMovieClip.stop(),作用是停止播放指定的電影剪輯。
stop()
附錄B 其它常用的設(shè)計(jì)軟件
¨ 下載
源程序¨ 聲音處理: CoolEdit Pro(下載)
¨ 文字處理: SwiSH(下載)
¨ 3D設(shè)計(jì): Swift 3D
附錄C ACTIONSCRIPT重要的分類
1.Flash運(yùn)算符號(hào)及其意義說明
運(yùn)算符號(hào)
主要解釋
--
--(遞減)
++
++(遞增)
!
!(邏輯 NOT)
!=
!=(不等于)
!==
!==(不全等)
%
%(模)
%=
%=(模賦值)
&
&(按位 AND)
&&
&&(短路 AND)
&=
&=(按位 AND 賦值)
()
()(括號(hào))
-
-(負(fù)號(hào))
*
*(乘號(hào))
*=
*=(相乘賦值)
,
,(逗號(hào))
.
.(點(diǎn))
:
:(條件)
/
/(除號(hào))
//
//(注釋分隔符)
/*
/*(注釋分隔符)
/=
/=(除賦值)
[]
[](數(shù)組訪問)
^
^(按位 XOR)
^=
^=(按位 XOR 賦值)
{}
{}(對象初始值設(shè)定項(xiàng))
|
|(按位 OR)
||
||(邏輯 OR)
|=
|=(按位 OR 賦值)
~
~(按位 NOT)
+
+(加號(hào))
+=
+=(加法賦值)
<
<(小于)
<<
<<(按位向左移位)
<<=
<<=(按位向左移位并賦值)
<=
<=(小于等于)
<>
<>(不等于)
=
=(賦值)
-=
-=(減法賦值)
==
==(等于)
===
===(全等)
>
>(大于)
>=
>=(大于等于)
>>
>>(按位向右移位)
>>=
>>=(按位向右移位并賦值)
>>>
>>>(按位無符號(hào)向右移位)
>>>=
>>>=(按位無符號(hào)向右移位并賦值)
2.FLASH的動(dòng)作腳本元素:類的分類及其主要知識(shí)
類名
主要知識(shí)
Accessibility
Accessibility 類管理與屏幕讀取器之間的通訊。Accessibility 類的方法是靜態(tài)的,即不必創(chuàng)建該類的實(shí)例即可使用其方法。
Arguments
Arguments 類是一個(gè)數(shù)組,其中包含作為參數(shù)傳遞給任何函數(shù)的值。每次在動(dòng)作腳本中調(diào)用函數(shù)時(shí),都會(huì)為該函數(shù)自動(dòng)創(chuàng)建 Arguments 對象。
Array
Array 類可以訪問和操縱數(shù)組。數(shù)組是一個(gè)對象,其屬性由表示該屬性在數(shù)組中位置的數(shù)字來標(biāo)識(shí)。此數(shù)字稱為“索引”。所有數(shù)組都從零開始,這意味著數(shù)組中的第一個(gè)元素為 [0],第二個(gè)元素為 [1],依次類推。
若要?jiǎng)?chuàng)建 Array 對象,請使用構(gòu)造函數(shù) new Array() 或數(shù)組訪問運(yùn)算符 ([])。若要訪問數(shù)組中的元素,請使用數(shù)組訪問運(yùn)算符 ([])。
Boolean
Boolean 類是一種包裝對象,它具有與標(biāo)準(zhǔn) JavaScript Boolean 對象一樣的功能。使用 Boolean 類可獲取 Boolean 對象的原始數(shù)據(jù)類型或字符串表示形式。
必須使用構(gòu)造函數(shù) new Boolean() 創(chuàng)建 Boolean 對象后,然后才能調(diào)用其方法。
Button
SWF 文件中的所有按鈕元件都是 Button 對象的實(shí)例。可在屬性檢查器中指定按鈕實(shí)例名稱,并通過動(dòng)作腳本使用 Button 類的方法和屬性來操縱按鈕。按鈕實(shí)例名稱顯示在“影片瀏覽器”中和“動(dòng)作”面板的“插入目標(biāo)路徑”對話框中。
Button 類繼承自 Object 類。
Camera
Camera 類主要用于 Macromedia Flash Communication Server,但也可以用在其它地方,只是在使用上受到限制。
可通過 Camera 類捕獲來自連接到計(jì)算機(jī)(該計(jì)算機(jī)應(yīng)運(yùn)行 Macromedia Flash Player)的攝像機(jī)的視頻,例如監(jiān)視來自連接到本地系統(tǒng)的 Web 攝像機(jī)的視頻輸入信號(hào)。
capabilities
使用 System.capabilities 對象可以確定承載 SWF 文件的系統(tǒng)和播放器的功能。這樣,就可以針對不同的格式對內(nèi)容進(jìn)行調(diào)整。例如,移動(dòng)電話的屏幕(黑白,100 x 100 像素)就與 1000 x 1000 像素的彩色 PC 屏幕不同。為了向盡可能多的用戶提供適當(dāng)?shù)膬?nèi)容,可以使用 System.capabilities 對象來確定用戶所擁有的設(shè)備的類型。然后,可以指定服務(wù)器根據(jù)不同的設(shè)備功能發(fā)送不同的 SWF 文件,或者通知 SWF 文件根據(jù)設(shè)備的功能改變它的播放方式。
可以使用 GET 或 POST HTTP 方法來發(fā)送功能信息。
ContextMenu
通過 Color 類,可以設(shè)置影片剪輯的 RGB 顏色值和顏色轉(zhuǎn)換,并可以在設(shè)置后獲取這些值。
必須使用構(gòu)造函數(shù) new Color() 創(chuàng)建 Color 對象后,才可調(diào)用其方法。
ContextMenuItem
ContextMenu 類提供對 Flash Player 上下文菜單項(xiàng)的運(yùn)行時(shí)控制,當(dāng)用戶在 Flash Player 中右擊 (Windows) 或按住 Control 鍵單擊 (Macintosh) 時(shí),上下文菜單將出現(xiàn)??梢允褂?nbsp;ContextMenu 類的方法和屬性添加自定義菜單項(xiàng),控制內(nèi)置菜單項(xiàng)的顯示(例如,“放大”和“打印”),或者創(chuàng)建菜單的副本。
可以將 ContextMenu 對象附加到特定的按鈕、影片剪輯或文本字段,也可以附加到整個(gè)影片級(jí)別。這可以使用 Button、MovieClip 或 TextField 類的 menu 屬性來實(shí)現(xiàn)。
若要向 ContextMenu 對象添加新的菜單項(xiàng),請創(chuàng)建一個(gè) ContextMenuItem 對象,然后將該對象添加到 ContextMenu.customItems 數(shù)組。
Flash Player 具有三種類型的上下文菜單:標(biāo)準(zhǔn)菜單(當(dāng)在 Flash Player 中右擊時(shí)出現(xiàn))、編輯菜單(當(dāng)在可選擇或可編輯的文本字段上右擊時(shí)出現(xiàn))和錯(cuò)誤菜單(當(dāng) SWF 文件未能加載到 Flash Player 中時(shí)出現(xiàn))。只有標(biāo)準(zhǔn)菜單和編輯菜單才能使用 ContextMenu 類進(jìn)行修改。
自定義菜單項(xiàng)始終出現(xiàn)在 Flash Player 上下文菜單的頂部,并位于所有可見內(nèi)置菜單項(xiàng)之上;內(nèi)置菜單項(xiàng)和自定義菜單項(xiàng)之間由一個(gè)分隔條加以分隔。一個(gè)上下文菜單包含的自定義菜單項(xiàng)不能超過 15 個(gè)。
必須在使用構(gòu)造函數(shù) new ContextMenu() 創(chuàng)建 ContextMenu 對象之后,才能調(diào)用它的方法。
ContextMenuItem 類
使用 ContextMenuItem 類可創(chuàng)建在 Flash Player 上下文菜單中顯示的自定義菜單項(xiàng)。每個(gè)ContextMenuItem 對象均具有在上下文菜單中顯示的標(biāo)題(文本)以及在選擇菜單項(xiàng)時(shí)調(diào)用的回調(diào)處理函數(shù)(函數(shù))。若要向上下文菜單添加新的上下文菜單項(xiàng),請將其添加到ContextMenu 對象的 customItems 數(shù)組。
可以啟用或禁用特定菜單項(xiàng),顯示或隱藏菜單項(xiàng),或者更改與菜單項(xiàng)關(guān)聯(lián)的標(biāo)題或回調(diào)處理函數(shù)。
自定義菜單項(xiàng)出現(xiàn)在上下文菜單的頂部,并位于所有內(nèi)置菜單項(xiàng)之上。自定義菜單項(xiàng)與內(nèi)置菜單項(xiàng)始終由分隔條隔開。向 Flash Player 上下文菜單添加的自定義菜單項(xiàng)不得超過 15 個(gè)。每個(gè)菜單項(xiàng)必須至少包含一個(gè)可見字符,控制字符、換行符和其它空白字符將被忽略。所有菜單項(xiàng)的長度不得超過 100 個(gè)字符。如果菜單項(xiàng)與任何內(nèi)置菜單項(xiàng)或其它自定義菜單項(xiàng)相同,則無論匹配菜單項(xiàng)是否可見,均會(huì)忽略該菜單項(xiàng)。對菜單項(xiàng)進(jìn)行比較時(shí)將忽略大小寫、標(biāo)點(diǎn)和空格。
自定義菜單項(xiàng)中不能出現(xiàn)以下字詞:Macromedia、Flash Player、或 設(shè)置。
CustomActions
CustomActions 類的方法使得在 Flash 創(chuàng)作工具中播放的 SWF 文件可以管理任何用該創(chuàng)作工具注冊的自定義動(dòng)作。SWF 文件可安裝和卸載自定義動(dòng)作,獲取自定義動(dòng)作的 XML 定義,以及獲取已注冊自定義動(dòng)作的列表。
可使用這些方法來生成屬于 Flash 創(chuàng)作工具擴(kuò)展功能的 SWF 文件。例如,這樣的擴(kuò)展功能可使用“Flash 應(yīng)用程序協(xié)議”定位 UDDI 儲(chǔ)備庫,并將 Web 服務(wù)下載到“動(dòng)作”工具箱。
Date
Date 類用于獲取相對于通用時(shí)間(格林尼治平均時(shí),現(xiàn)在叫做通用時(shí)間或 UTC)或相對于運(yùn)行 Flash Player 的操作系統(tǒng)的日期和時(shí)間值。Date 類的方法不是靜態(tài)的,但僅應(yīng)用于調(diào)用方法時(shí)指定的單個(gè) Date 對象。
Date.UTC() 方法屬于異常,它是一個(gè)靜態(tài)方法。
Date 類以不同的方式處理夏時(shí)制,具體方式取決于操作系統(tǒng)和 Flash Player 的版本。在下面的操作系統(tǒng)中,F(xiàn)lash Player 6 及更高版本以這些方式處理夏時(shí)制:
WindowsóóDate 對象為夏時(shí)制自動(dòng)調(diào)整其輸出。Date 對象檢測在當(dāng)前區(qū)域設(shè)置內(nèi)是否應(yīng)用了夏時(shí)制,如果是,它將檢測標(biāo)準(zhǔn)的夏時(shí)制轉(zhuǎn)換日期和時(shí)間。然而,當(dāng)前有效的轉(zhuǎn)換日期會(huì)應(yīng)用到以前和將來的日期,所以如果該區(qū)域設(shè)置具有不同的轉(zhuǎn)換日期,則對于以前的日期,夏時(shí)制偏差的計(jì)算結(jié)果可能會(huì)不正確。
Mac OS XóóDate 對象為夏時(shí)制自動(dòng)調(diào)整其輸出。Mac OS X 中的時(shí)區(qū)信息數(shù)據(jù)庫用于確定現(xiàn)在或以前的任何日期或時(shí)間是否應(yīng)該應(yīng)用夏時(shí)制偏差。
在下面的操作系統(tǒng)中,F(xiàn)lash Player 5 處理夏時(shí)制方式如下所示:
Windowsóó始終采用美國的夏時(shí)制規(guī)則,在歐洲和采用夏時(shí)制但轉(zhuǎn)換時(shí)間與美國不同的其它
區(qū)域中,這將造成不正確的轉(zhuǎn)換結(jié)果。Flash 能夠正確檢測出在當(dāng)前區(qū)域設(shè)置中是否應(yīng)用了 DST。
若要調(diào)用 Date 類的方法,必須按照本節(jié)后面部分所述使用 Date 類的構(gòu)造函數(shù)創(chuàng)建一個(gè) Date 對象。
Error
包含關(guān)于腳本中出現(xiàn)的錯(cuò)誤的信息。Error 對象使用 Error 構(gòu)造函數(shù)來創(chuàng)建。通常,新的 Error 對象從 try 代碼塊中“拋出”,然后由 catch 或 finally 代碼塊“捕獲”。
也可以創(chuàng)建 Error 類的子類,然后引發(fā)該子類的實(shí)例。
function
Key
Key 類是不通過構(gòu)造函數(shù)即可使用其方法和屬性的頂級(jí)類。使用 Key 類的方法可生成用戶能夠通過標(biāo)準(zhǔn)鍵盤控制的界面。Key 類的屬性是常量,表示控制游戲時(shí)最經(jīng)常使用的鍵。
LoadVars
LoadVars 類是
loadVariables() 函數(shù)的替代方法,用于在 Flash 應(yīng)用程序和服務(wù)器之間傳輸變量。
可以使用 LoadVars 類在下載時(shí)獲取成功數(shù)據(jù)加載、進(jìn)度指示和流數(shù)據(jù)的驗(yàn)證信息。LoadVars 類的工作原理非常類似于
XML 類;它使用方法 load()、send() 和 sendAndLoad() 與服務(wù)器進(jìn)行通訊。LoadVars 類和 XML 類之間的主要差別在于 LoadVars 傳輸動(dòng)作腳本的名稱和值對,而不是 XML 對象中存儲(chǔ)的 XML DOM 樹。
LoadVars 類與 XML 類遵循相同的安全限制。
LocalConnection
LocalConnection 類用于開發(fā) SWF 文件,這些文件無需使用
fscommand() 或 JavaScript 即可相互發(fā)送指令。LocalConnection 對象只能在運(yùn)行于同一臺(tái)客戶機(jī)上的 SWF 文件之間通訊,但這些 SWF 文件可以在兩個(gè)不同的應(yīng)用程序中運(yùn)行。例如,一個(gè) SWF 文件在瀏覽器中運(yùn)行,而一個(gè) SWF 文件在播放器中運(yùn)行??梢允褂?nbsp;LocalConnection 對象在單個(gè) SWF 文件中發(fā)送和接收數(shù)據(jù),但這不是標(biāo)準(zhǔn)的實(shí)現(xiàn)
Math
Math 類是一個(gè)頂級(jí)類,不必使用構(gòu)造函數(shù)即可使用其方法和屬性。
使用該類的方法和屬性可以訪問和處理數(shù)學(xué)常數(shù)和函數(shù)。Math 類的所有屬性和方法都是靜態(tài)的,并且必須使用語法 Math.method(parameter) 或 Math.constant 來調(diào)用。在動(dòng)作腳本中,使用雙精度 IEEE-754 浮點(diǎn)數(shù)的最高精度定義常數(shù)。
Flash Player 5 完全支持 Math 類。在 Flash Player 4 中,可以使用 Math 類的方法,但是這些方法是使用近似值模擬的,可能不如 Flash Player 5 支持的非模擬數(shù)學(xué)函數(shù)那樣精確。
Microphone
Microphone 類用于從運(yùn)行 Flash Player 的計(jì)算機(jī)上所連接的麥克風(fēng)中捕獲音頻。
Microphone 類主要與 Flash Communication Server 一起使用,但在沒有該服務(wù)器的情況下也能以有限的方式使用,例如通過本地系統(tǒng)上的揚(yáng)聲器傳送麥克風(fēng)中的聲音。
若要?jiǎng)?chuàng)建或引用 Microphone 對象,請使用
Microphone.get() 方法。
Mouse
Mouse 類是不通過構(gòu)造函數(shù)即可訪問其屬性和方法的頂級(jí)類??梢允褂?nbsp;Mouse 類的方法來隱藏和顯示 SWF 文件中的鼠標(biāo)指針(光標(biāo))。默認(rèn)情況下鼠標(biāo)指針是可見的,但是可以將其隱藏并實(shí)現(xiàn)用影片剪輯創(chuàng)建的自定義指針。
MovieClip
MovieClip 類的方法提供的功能與定位影片剪輯的動(dòng)作所提供的功能相同。還有一些其它方法在“動(dòng)作”面板中的“動(dòng)作”工具箱中沒有等效動(dòng)作。
無需使用構(gòu)造函數(shù)方法即可調(diào)用 MovieClip 類的方法。
MovieClipLoader
此類用于實(shí)現(xiàn)在 SWF 或 JPEG 文件正被加載到(下載到)影片剪輯中時(shí)提供狀態(tài)信息的偵聽器回調(diào)。若要使用 MovieClipLoader 功能,請使用
MovieClipLoader.loadClip()(而不是 loadMovie() 或 MovieClip.loadMovie())來加載 SWF 文件。
在發(fā)出 MovieClipLoader.loadClip() 命令后,以下事件按下列順序發(fā)生:
在下載的文件的第一個(gè)字節(jié)寫入磁盤后,調(diào)用
MovieClipLoader.onLoadStart() 偵聽器。
如果您已實(shí)現(xiàn)了
MovieClipLoader.onLoadProgress() 偵聽器,則在加載過程中調(diào)用它。
注意:可以在加載過程中隨時(shí)調(diào)用
MovieClipLoader.getProgress()。
在整個(gè)下載的文件都寫入磁盤后,調(diào)用
MovieClipLoader.onLoadComplete() 偵聽器。
在執(zhí)行下載的文件的第一個(gè)幀動(dòng)作后,調(diào)用
MovieClipLoader.onLoadInit() 偵聽器。
在調(diào)用 MovieClipLoader.onLoadInit() 后,可以設(shè)置屬性,使用方法,以及與加載的影片交互。
如果文件未能完全加載,則調(diào)用
MovieClipLoader.onLoadError() 偵聽器。
NetConnection
NetConnection 類提供從本地驅(qū)動(dòng)器或 HTTP 地址播放 FLV 文件流的方法。
NetStream
NetStream 類提供從本地文件系統(tǒng)或 HTTP 地址播放 Flash 視頻 (FLV) 文件的方法和屬性。使用 NetStream 對象以通過 NetConnection 對象對視頻進(jìn)行流式處理。與在 Flash 文檔中嵌入視頻相比,播放外部 FLV 文件有多個(gè)好處,例如更好的性能和內(nèi)存管理以及獨(dú)立的視頻和 Flash 幀頻。該類提供若干方法和屬性,可以利用這些方法和屬性在一個(gè)文件加載和播放時(shí)跟蹤該文件的進(jìn)度,以及便于用戶控制回放(停止或暫停等)。
Number
Number 類是 Number 數(shù)據(jù)類型的簡單包裝對象。使用與 Number 類關(guān)聯(lián)的方法和屬性可以操作基本數(shù)值。此類與 JavaScript Number 類完全相同。
調(diào)用 Number 對象的方法時(shí)必須使用構(gòu)造函數(shù),但是當(dāng)調(diào)用 Number 對象的屬性時(shí)則不需要使用構(gòu)造函數(shù)。
Object
Object 類位于動(dòng)作腳本類層次結(jié)構(gòu)的根處。此類包含 JavaScript Object 類所提供功能的一小部分。
PrintJob
PrintJob 類用于創(chuàng)建內(nèi)容并將其打印為一頁或多頁。除了對 print() 方法提供的打印功能進(jìn)行改進(jìn)之外,此類還允許呈現(xiàn)屏幕上未顯示的動(dòng)態(tài)內(nèi)容、通過單個(gè)打印對話框提示用戶,并且可以打印未經(jīng)縮放的文檔,使用的比例與內(nèi)容的比例相同。此功能特別適用于呈現(xiàn)和打印外部動(dòng)態(tài)內(nèi)容,例如數(shù)據(jù)庫內(nèi)容和動(dòng)態(tài)文本。
另外,使用由 PrintJob.start() 填充的屬性,文檔可以訪問用戶打印機(jī)設(shè)置,例如頁高度、寬度和方向,并且可以配置文檔以動(dòng)態(tài)設(shè)置適用于打印機(jī)設(shè)置的 Flash 內(nèi)容的格式。
Selection
利用 Selection 類可以設(shè)置和控制插入點(diǎn)所在的文本字段,即,具有焦點(diǎn)的字段。選擇范圍 (Selection-span) 索引是從零開始的(例如,第一個(gè)位置為 0、第二個(gè)位置為 1,依此類推)。
Selection 類沒有構(gòu)造函數(shù),這是因?yàn)樵谕粫r(shí)間只能有一個(gè)當(dāng)前具有焦點(diǎn)的字段。
SharedObject
共享對象相當(dāng)強(qiáng)大:它們提供用戶計(jì)算機(jī)上永久對象間的實(shí)時(shí)數(shù)據(jù)共享??梢詫⒈镜毓蚕韺ο罂醋鳌癈ookie”。
可以使用本地共享對象維持本地永久性。這是使用共享對象最簡單的方式。例如,可以調(diào)用
SharedObject.getLocal() 在播放器中創(chuàng)建共享對象,例如具有內(nèi)存的計(jì)算器。因?yàn)楣蚕韺ο笤诒镜厥怯谰眯缘?,所以?dāng) SWF 文件結(jié)束時(shí) Flash 會(huì)將其數(shù)據(jù)屬性保存在用戶的計(jì)算機(jī)上。SWF 文件下次運(yùn)行時(shí),計(jì)算器仍包含 SWF 文件結(jié)束時(shí)它所具有的值?;蛘?,如果在 SWF 結(jié)束前將共享對象的屬性設(shè)置為 null,則當(dāng) SWF 文件下次運(yùn)行時(shí),計(jì)算器打開時(shí)不帶有任何以前的值。
Stage
Stage 類是一個(gè)頂級(jí)類,不必使用構(gòu)造函數(shù)即可訪問其方法、屬性和處理函數(shù)。
此類的方法和屬性用于訪問和操作有關(guān) SWF 文件邊界的信息。
String
String 類是字符串原始數(shù)據(jù)類型的包裝,提供用于操作原始字符串值類型的方法和屬性??梢酝ㄟ^ String() 函數(shù)將任何對象的值轉(zhuǎn)換為字符串。
除了 concat()、fromCharCode()、slice() 和 substr() 之外,String 對象的所有其它方法都是通用方法。這意味著這些方法本身先調(diào)用 this.toString(),然后再執(zhí)行它們的操作,而且可以將這些方法用于其它非 String 對象。
因?yàn)樗凶址饕际菑牧汩_始的,所以任何字符串 x 的最后一個(gè)字符的索引都是x.length - 1。
可以使用構(gòu)造函數(shù)方法 new String 或者使用字符串文本值調(diào)用 String 類的任何方法。如果指定了一個(gè)字符串,則動(dòng)作腳本解釋程序自動(dòng)將其轉(zhuǎn)換為一個(gè)臨時(shí) String 對象,再調(diào)用方法,然后放棄該臨時(shí) String 對象。還可以將 String.length 屬性用于字符串。
請不要將字符串和 String 對象相混淆。
除非確實(shí)需要使用 String 對象,否則請使用字符串。
StyleSheet
使用 TextField.StyleSheet 類可以創(chuàng)建包含文本格式設(shè)置規(guī)則(例如,字體大小、顏色和其它格式樣式)的樣式表對象。然后,可以將樣式表定義的樣式應(yīng)用到包含 HTML 或 XML 格式文本的 TextField 對象。該 TextField 對象所包含的文本將自動(dòng)根據(jù)該樣式表對象定義的標(biāo)簽樣式進(jìn)行格式設(shè)置??梢允褂梦谋緲邮絹矶x新的格式標(biāo)簽,重新定義內(nèi)置的 HTML 標(biāo)簽,或創(chuàng)建可應(yīng)用到某些 HTML 標(biāo)簽的樣式類。
若要將樣式應(yīng)用到某個(gè) TextField 對象,請將樣式表對象賦給該 TextField 對象的 styleSheet 屬性。
System
這是一個(gè)頂級(jí)類,包括功能對象、安全對象,以及下面列出的方法、屬性和事件處理函數(shù)。
System.setClipboard()用文本字符串替換系統(tǒng)剪貼板的內(nèi)容。
System.showSettings()顯示 Flash Player“設(shè)置”面板。
TextField
SWF 文件中的所有動(dòng)態(tài)文本字段和輸入文本字段都是 TextField 類的實(shí)例??梢栽趯傩詸z查器中為文本字段指定實(shí)例名稱,并且可以在動(dòng)作腳本中使用 TextField 類的方法和屬性對文本字段進(jìn)行操作。TextField 的實(shí)例名稱顯示在“影片管理器”中及“動(dòng)作”面板的“插入目標(biāo)路徑”對話框中。
TextField 類繼承自
Object 類。
若要?jiǎng)討B(tài)創(chuàng)建文本字段,可以使用
MovieClip.createTextField()。
TextFormat
TextFormat 類描述字符格式設(shè)置信息。
必須在使用構(gòu)造函數(shù) new TextFormat() 創(chuàng)建了 TextFormat 對象之后,才能調(diào)用其方法。
可將 TextFormat 參數(shù)設(shè)置為 null,以指示它們是未定義的。使用
TextField.setTextFormat() 將 TextFormat 對象應(yīng)用到文本字段時(shí),只會(huì)應(yīng)用該對象已定義的屬性。
調(diào)用
TextField.getTextFormat() 時(shí),將返回一個(gè) TextFormat 對象,該對象的所有屬性均已定義;所有屬性都不為 null。
TextSnapshot
TextSnapshot 對象可用于處理影片剪輯中的靜態(tài)文本。例如,可以使用它們用比動(dòng)態(tài)文本所允許的更高的精確對文本進(jìn)行布局,但仍以只讀方式訪問該文本。
不使用構(gòu)造函數(shù)創(chuàng)建 TextSnapshot 對象;它是由
MovieClip.getTextSnapshot() 返回的。
Video
使用 Video 類可以直接在舞臺(tái)上顯示實(shí)時(shí)視頻流,而無需將其嵌入SWF 文件中。可以使用
Camera.get() 來捕獲視頻。在為 Flash Player 7 和更高版本發(fā)布的文件中,還可以使用 Video 類通過 HTTP 或在本地文件系統(tǒng)中回放 Flash 視頻 (FLV) 文件。有關(guān)更多信息,請參見
動(dòng)態(tài)回放外部 FLV 文件、
NetConnection 類和
NetStream 類。
Video 對象的使用方式類似于影片剪輯。就像放置在舞臺(tái)上的其它對象一樣,可以控制 Video 對象的多種屬性。例如,可以通過使用 Video 對象的 _x 和 _y 屬性在舞臺(tái)上移動(dòng)該對象;可以通過使用其 _height 和 _width 屬性更改其大小等。
若要顯示視頻流,首先將 Video 對象放置在舞臺(tái)上。然后使用
Video.attachVideo() 將視頻流附加到 Video 對象。
XML
使用 XML 類的方法和屬性可以加載、分析、發(fā)送、生成和操作 XML 文檔樹。
必須先使用構(gòu)造函數(shù) new XML() 創(chuàng)建 XML 對象,然后才能調(diào)用 XML 類的方法。
XMLSocket
XMLSocket 類用于實(shí)現(xiàn)客戶端套接字。利用客戶端套接字,運(yùn)行 Flash Player 的計(jì)算機(jī)可以與由 IP 地址或域名標(biāo)識(shí)的服務(wù)器計(jì)算機(jī)進(jìn)行通訊。對于要求滯后時(shí)間較短的客戶端/服務(wù)器應(yīng)用程序,如實(shí)時(shí)聊天系統(tǒng),XMLSocket 類非常有用。傳統(tǒng)的基于 HTTP 的聊天解決方案頻繁輪詢服務(wù)器,并使用 HTTP 請求來下載新的消息。與此相反,XMLSocket 聊天解決方案保持與服務(wù)器的開放連接,這一連接允許服務(wù)器即時(shí)發(fā)送傳入的消息,而無需客戶端發(fā)出請求。
若要使用 XMLSocket 類,服務(wù)器計(jì)算機(jī)必須運(yùn)行可識(shí)別 XMLSocket 類使用的協(xié)議的守護(hù)程序。 協(xié)議如下所示:
XML 消息通過全雙工 TCP/IP 流套接字連接發(fā)送。
每個(gè) XML 消息都是一個(gè)完整的 XML 文檔,以零字節(jié)結(jié)束。
通過一個(gè) XMLSocket 連接發(fā)送和接收的 XML 消息數(shù)沒有限制。
XMLSocket 對象連接到服務(wù)器的方式和位置受下列限制:
XMLSocket.connect() 方法只能連接到端口號(hào)大于或等于 1024 的 TCP 端口。這種限制的一個(gè)后果是,與 XMLSocket 對象通訊的服務(wù)器守護(hù)程序也必須分配到端口號(hào)大于或等于 1024 的端口。端口號(hào)小于 1024 的端口通常由系統(tǒng)服務(wù)(如 FTP、Telnet 和 HTTP)使用,因此,出于安全方面的考慮,禁止 XMLSocket 對象使用這些端口。這種端口號(hào)方面的限制可以減少不恰當(dāng)?shù)卦L問和濫用這些資源的可能性。
XMLSocket.connect() 方法只能連接到 SWF 文件所在域中的計(jì)算機(jī)。這一限制不適用于在本地磁盤外運(yùn)行的 SWF 文件。(這一限制與 loadVariables()、XML.sendAndLoad() 和 XML.load() 的安全規(guī)則相同。)若要連接到在 SWF 所在域之外的其它域中運(yùn)行的服務(wù)器守護(hù)程序,可以在該服務(wù)器上創(chuàng)建一個(gè)允許從特定域進(jìn)行訪問的安全策略文件。有關(guān)為 XMLSocket 連接創(chuàng)建策略文件的更多信息,請參見
關(guān)于允許跨域數(shù)據(jù)加載。
將服務(wù)器設(shè)置為與 XMLSocket 對象進(jìn)行通訊可能會(huì)遇到一些困難。如果應(yīng)用程序不需要進(jìn)行實(shí)時(shí)交互,請使用 loadVariables() 動(dòng)作或 Flash 的基于 HTTP 的 XML 服務(wù)器連接(XML.load()、XML.sendAndLoad()、XML.send()),而不要使用 XMLSocket 類。
若要使用 XMLSocket 類的方法,必須首先使用構(gòu)造函數(shù) new XMLSocket 創(chuàng)建一個(gè)新的 XMLSocket 對象。
3.Flash Action Script的元素分類及其實(shí)例索引:
運(yùn)算符
“”;()
位運(yùn)算
比較
賦值
邏輯
算術(shù)
其它
關(guān)鍵字
常量
false/true
newline
null
undefined
語句
動(dòng)作
影片控制
瀏覽器/網(wǎng)絡(luò)
影片剪輯控制
變量
條件循環(huán)
打印
用戶定義的函數(shù)
其它動(dòng)作
屬性
函數(shù)
一般
數(shù)學(xué)
轉(zhuǎn)換
對象
核心對象
arguments
屬性
array
構(gòu)造函數(shù)
方法
屬性
boolean
構(gòu)造函數(shù)
方法
date
構(gòu)造函數(shù)
方法
function
方法
屬性
math
方法
常數(shù)
number
構(gòu)造函數(shù)
方法
常數(shù)
object
構(gòu)造函數(shù)
方法
屬性
string
構(gòu)造函數(shù)
方法
屬性
其它
_global
super
this
影片
accessibility
方法
button
方法
屬性
事件
capabilityes
屬性
color
構(gòu)造函數(shù)
方法
key
方法
常數(shù)
偵聽器
mouse
方法
偵聽器
movieclip
方法
繪圖方法
屬性
事件
selection
方法
偵聽器
sound
構(gòu)造函數(shù)
方法
屬性
事件
stage
方法
屬性
事件
system
對象
textfield
方法
屬性
事件
偵聽器
textformat
構(gòu)造函數(shù)
方法
屬性
其它重要元素
_level
_parent
_root
客戶端/服務(wù)器
loadvars
構(gòu)造函數(shù)
方法
屬性
事件
xml
構(gòu)造函數(shù)
方法
屬性
事件
xmlsocket
構(gòu)造函數(shù)
方法
事件
創(chuàng)作
實(shí)時(shí)預(yù)覽
屬性
自定動(dòng)作
方法
flash UI組件
FCheckBox
方法
FComboBox
方法
FListBox
方法
FPushButton
方法
FRadioButton
FRadioButton組
方法
FScrollBar
方法
FScrollPane
方法
FstyleFormat
構(gòu)造函數(shù)
方法
屬性
附錄D 考試測評
¨ 考試時(shí)間:待定
¨ 題目:設(shè)計(jì)一個(gè)FLASH電影動(dòng)畫,里面包含一定效果的動(dòng)作腳本程序,并輸出成可以播放的電影,其內(nèi)容限定為某科學(xué)習(xí)或教學(xué)的內(nèi)容。
¨ 要求:
嚴(yán)禁抄襲,拿來主義者害人害己;
獨(dú)立完成,謝絕高人攜手相助;
作品的第一場景要有作者的姓名、學(xué)校名稱,最好還有作者的其它信息,例如照片、自畫像等等;
上交的作品包括 fla 、 swf文件;
至少在一幀里有一段動(dòng)作腳本程序;
至少制作一個(gè)按鈕,其中包含一段動(dòng)作腳本程序;
每段的動(dòng)作腳本程序要有詳細(xì)的文字注釋說明;
必須在考試之日上交。
(達(dá)到以上要求者才有60分)
附錄E 學(xué)習(xí)參考資料
¨ 本課程學(xué)習(xí)網(wǎng)站
http://xylin9090. nease.net
¨ 學(xué)習(xí)參考書:
FLASH MX編程深層次應(yīng)用 邊城浪子 電子工業(yè)出版社 2003年1月 34.00元 ISBN 7-5053-8162-8
¨ 學(xué)習(xí)參考網(wǎng)站:
教程類
http://netcity4.web.hinet.net/userdata/twg/guide.htmhttp://www.flash8.net/http://www.flashsun.net/home/book/
Flash作品類
http://jc365.com/flash/http://www.flash8.net/http://www.flashsun.com/home/