Flash復(fù)習(xí)資料

Flash理論課復(fù)習(xí)具體內(nèi)容

02.jpg

題型

1. 單選 20*2=40
2. 程序填空題 4*10=40
3. 編程題 10
4. 簡述題 10

書本章節(jié)

一便脊、第一章

1.關(guān)于flash的基本操作 常用快捷鍵 shift+橢圓工具 ctrl+enter f5 f6 f7 f9 ctrl+d

shift+拉伸    橢圓變正圓
ctrl+enter  運(yùn)行flash
f5      普通幀
f6      關(guān)鍵幀
f7      空白關(guān)鍵幀
f9      代碼窗口
ctrl+d      復(fù)制對象

2.工具欄的使用 形變動畫 分離 補(bǔ)間 3種幀 普通幀 空白關(guān)鍵幀 關(guān)鍵幀

a.空白幀:表示當(dāng)前時(shí)間軸面板上的某一個(gè)圖層沒有幀罚屋。
b.傳統(tǒng)補(bǔ)間:該狀態(tài)表示在兩個(gè)關(guān)鍵幀之間成功創(chuàng)建了“傳統(tǒng)補(bǔ)間動畫”
c.形狀補(bǔ)間:淺綠色底紋表明創(chuàng)建的補(bǔ)間為“補(bǔ)間形狀”。
d.普通幀:以關(guān)鍵幀開始,以矩形顯示的普通幀結(jié)束,表明在這兩個(gè)幀之間持續(xù)顯示第一個(gè)關(guān)鍵幀的內(nèi)容。
e.添加語句:為了控制動畫播放兽赁,會在幀上添加腳本語句。添加了腳本語句的幀上會顯示“a”標(biāo)簽冷守。
f.注釋:選擇一個(gè)幀刀崖,在屬性面板的“注釋”一項(xiàng)輸入文字,即為該幀添加了注釋拍摇。
g.補(bǔ)間動畫:在Flash中亮钦,為元件創(chuàng)建補(bǔ)間后,幀的顯示為此狀態(tài)充活。
h.波形幀:此幀用于表示聲音文件蜂莉。

關(guān)于幀

(1)普通幀(F5):

普通幀在時(shí)間軸中用空心矩形表示。普通幀的主要作用是重復(fù)顯示前一幀的內(nèi)容而不做改變混卵。

(2)關(guān)鍵幀(F6) :

關(guān)鍵幀在時(shí)間軸上用實(shí)心圓點(diǎn)表示映穗。關(guān)鍵幀定義了動畫中的關(guān)鍵畫面 ,關(guān)鍵幀除了具備重復(fù)顯示前一幀內(nèi)容的作用之外幕随,還允許用戶對關(guān)鍵幀中的內(nèi)容進(jìn)行修改蚁滋。

(3)空白關(guān)鍵幀(F7) :

空白關(guān)鍵幀在時(shí)間軸上用空心的圓點(diǎn)表示。空白關(guān)鍵幀具備有關(guān)鍵幀的屬性辕录,但空白關(guān)鍵幀不會重復(fù)顯示前一幀的內(nèi)容睦霎,而是在空白關(guān)鍵幀所處的當(dāng)前幀起不再顯示前面幀的內(nèi)容,將舞臺清空走诞,便于用戶制作后續(xù)的畫面內(nèi)容副女,用戶一旦在空白關(guān)鍵幀中添加了內(nèi)容,空白關(guān)鍵幀將會自動轉(zhuǎn)變?yōu)殛P(guān)鍵幀蚣旱。

3.元件的3種 多個(gè)幀 1個(gè)幀 4個(gè)幀熱區(qū)碑幅!

元件分為三種類型:影片剪輯元件、按鈕元件和圖形元件

1)影片剪輯元件

影片剪輯元件用于創(chuàng)建一類可以被用戶重復(fù)使用的動畫片段塞绿。影片剪輯元件有獨(dú)立的時(shí)間軸面板枕赵,用戶可以直接在影片剪輯元件編輯中制作動畫片段,其制作方法與場景中動畫的制作方法相同位隶。影片剪輯元件雖然是一個(gè)動畫片段,制作過程中需要使用**多個(gè)幀**來完成开皿,但將影片剪輯元件應(yīng)用于其他對象時(shí)涧黄,只占用一個(gè)幀的位置,但播放時(shí)卻同樣具有動態(tài)效果赋荆。

影片剪輯元件中可以使用聲音笋妥、視頻、圖形和文字等等各種媒體素材窄潭。

2)按鈕元件

按鈕元件是用戶與動畫的接口春宣,用戶通過按鈕元件及動作腳本語句可以輕松實(shí)現(xiàn)人機(jī)交互的效果。新建一個(gè)按鈕元件后進(jìn)入到按鈕元件的編輯窗口嫉你,按鈕元件有四個(gè)幀
**彈起:**是按鈕的普通顯示狀態(tài)月帝。即用戶鼠標(biāo)還未觸發(fā)按鈕時(shí)的顯示狀態(tài)。
**指針經(jīng)過:**該幀中的內(nèi)容由用戶的鼠標(biāo)移動經(jīng)過按鈕時(shí)觸發(fā)幽污。
**按下:**用戶單擊鼠標(biāo)時(shí)按鈕的顯示狀態(tài)嚷辅。
**點(diǎn)擊:**該幀定義響應(yīng)鼠標(biāo)單擊的區(qū)域。

按鈕元件中經(jīng)常使用到的媒體素材有聲音文件和圖形文件等各種類型距误。

(3)圖形元件

一般為矢量圖形簸搞、位圖和文字等對象。**一個(gè)幀**

圖形元件的編輯窗口與場景的編輯窗口相同准潭。用戶如果將交互控制和聲音素材放于圖形元件中趁俊,但卻無原有的動態(tài)效果。

4.導(dǎo)入外部圖片素材 主要圖片格式 jpg bmp gif png 導(dǎo)入舞臺 哪個(gè)是動態(tài)圖刑然?會變成逐幀動畫寺擂?

只有g(shù)if是逐幀動畫 其他都是靜態(tài)

5.幀頻FPS 每秒播放的幀數(shù) 圖層,常見的圖層類型 普通圖層 遮罩圖層、引導(dǎo)圖層——至少不止一層

**遮罩動畫至少有2個(gè)層 遮罩層和被遮罩層**

幀頻 = frequent per second

6.繪制矢量圖的方法

矩形沽讹、橢圓形工具般卑、鋼筆工具

7.元件 重點(diǎn)掌握 元件的優(yōu)勢

1.一次制作、反復(fù)使用
2.無論元件加多少個(gè)都不會增加文件的容量
3.在as3.0用代碼直接當(dāng)類生成導(dǎo)出爽雄,方便創(chuàng)建對象

8.實(shí)例和元件的關(guān)系 類蝠检、對象、屬性

實(shí)例能直接使用-實(shí)例名.屬性挚瘟,進(jìn)行操作 如:myText.text = "hello";
元件要通過類引用新建為對象叹谁,再對對象的屬性操作,如: var myTitle:Text = new Text();myTitle.text = "yooooooo";

9.動畫的導(dǎo)出 可以導(dǎo)出swf 嵌入網(wǎng)頁 導(dǎo)出很多不同類別的文件 測試導(dǎo)出時(shí)的3類文件.fla .swf .as這3類文件

導(dǎo)出文件乘盖,格式相關(guān)的東西需要謹(jǐn)記

10.as3代碼的位置 時(shí)間軸上焰檩、時(shí)間軸的幀上、專門的腳本文件

如果是在時(shí)間軸上面用F9插入了代碼 那個(gè)幀上面就會有a符號
如果是在外部鏈接了as文件订框,則舞臺上會直接關(guān)聯(lián)一個(gè)as腳本
//在屏幕上打印出一段文字的代碼
package {
    //導(dǎo)入所需的類
    import flash.display.Sprite;
    import flash.text.*;
    //定義類
    public class Main extends Sprite {
        //聲明一個(gè)文本變量
        public var myText:TextField = new TextField();
        //創(chuàng)建一個(gè)與類名稱一致的方法
        public function Main() {
            //定義文本內(nèi)容
            myText.autoSize = TextFieldAutoSize.LEFT;
            myText.text = "HELLO MY FLASH";
            //定義文本的樣式
            var myFormat:TextFormat = new TextFormat();
            myFormat.size = 50;
            myFormat.font = "Cooper Black";
            myFormat.color = 0x005588;
            //定義文本位置
            myText.x=50
            myText.y=150
            //應(yīng)用定義的樣式
            myText.setTextFormat(myFormat);
            //在舞臺上創(chuàng)建顯示對象
            addChild(myText);
        }
    }
}

二析苫、第二章(重點(diǎn))

1.變量定義的方法
2.變量的命名規(guī)則

關(guān)于變量

變量指的是在程序中可以發(fā)生變化的量,實(shí)際上穿扳,變量是內(nèi)存中存儲數(shù)據(jù)的容器衩侥,用來存儲在程序中需要使用的值。
在 ActionScript 3.0中矛物,變量在使用時(shí)需要先定義

變量的三大要素:名稱茫死、類型

變量的定義

格式: var  變量名:數(shù)據(jù)類型名履羞;
var:定義變量的關(guān)鍵字
變量名:用戶命名的一串有效的標(biāo)識峦萎,規(guī)則如下:
1.必須以字母開頭,且只能由字母忆首、數(shù)字和下劃線“_”組成爱榔,一般采用 “駱駝命名法”命名形式:首字母小寫,組成變量名的其他單詞的首字母大寫糙及,單詞其他字母小寫搓蚪。如myText (嚴(yán)格區(qū)分大小)丁鹉;
2.變量名不易太長妒潭,盡量做到以最小長度傳達(dá)最大信息量的目的。如:userName和myAge等
3.變量名要做到唯一使用揣钦;
4.不能使用ActionScript3.0中的關(guān)鍵字作為變量的名稱

數(shù)據(jù)類型名:不同數(shù)據(jù)類型有特定的類型名雳灾, var i: int;

1.在對變量進(jìn)行聲明時(shí),還可以使用賦值運(yùn)算符“=”直接為變量賦值冯凹。如:
      var n:Number;
      n=3;
或
      var n:Number=3;   
2.如果要同時(shí)聲明多個(gè)變量 谎亩, 可以使用逗號運(yùn)算符(,)來對變量進(jìn)行分隔炒嘲,此時(shí)可以在同一行代碼中為每個(gè)變量賦值。如:
       var a:int=5, b:Boolean=true, c:String=”My Word”;   
3.在創(chuàng)建數(shù)組時(shí)匈庭,往往需要在聲明數(shù)組的同時(shí)為數(shù)組賦值夫凸。此時(shí)可以使用下面的方法:
var myArray:Array=[”button”,”photo”];
var myArray:Array=new Array(元素1,元素2,……)
var myArray:Array=new Array();
        myArray[0]=1;
        myArray[1]=2;
        ………….
4.在創(chuàng)建類的實(shí)例時(shí),需要在變量聲明的同時(shí)為變量賦值阱持。此時(shí)可以使用new運(yùn)算符來創(chuàng)建類的實(shí)例
如:下面的語句創(chuàng)建一個(gè)影片剪輯實(shí)例:
    var myMC:MovieClip =new MovieClip();

變量的作用域:變量使用的范圍夭拌,是指代碼在運(yùn)行變量時(shí)可以被引用的區(qū)域;
分為“全局”和“局部”兩種衷咽;

1.全局變量是在任何函數(shù)或類定義的外部定義的變量鸽扁,其在函數(shù)定義或類定義的外部和內(nèi)部均可以使用。
2.局部變量是在函數(shù)中定義聲明的變量镶骗,這種在函數(shù)塊中定義的局部變量只能在函數(shù)內(nèi)部使用桶现,在函數(shù)外部不可用。
//示例代碼 全局變量與局部變量
>
var myText:String="全局變量";
function myTest() {
    trace(myText);
}
myTest();
trace(myText);
>
function myTest() {
    var myText:String="局部變量";
    trace(myText);
}
myTest();

常量

常量指的是在程序中固定不變的量鼎姊。
常量可以看作是一種使用const關(guān)鍵字來進(jìn)行聲明的特殊變量骡和,其只能在聲明的同時(shí)進(jìn)行賦值,一經(jīng)賦值其值就不能改變相寇。
當(dāng)在程序中試圖對常量的值進(jìn)行改變時(shí)慰于,編譯器就會報(bào)錯(cuò)。在編寫程序時(shí)裆赵,如果能夠確定一個(gè)變量的值不會發(fā)生改變,就可以將其定義為常量跺嗽,以便編譯器來對其進(jìn)行監(jiān)督战授。

常量使用const關(guān)鍵字來聲明:

public stactic const PI:Number=3.1415927;

Flash Player API定義了一組常量供程序員使用,
這些常量全部使用大寫字母桨嫁,各個(gè)單詞之間以下劃線“_”來連接 植兰。

//常量的示意代碼
package flash.events
{
    public class MouseEvent extends Events
    {
        public static const MOUSE_MOVE:String=”mouseMove”;
    }
}

3.數(shù)據(jù)類型的轉(zhuǎn)換 int sting boolean=true\false

數(shù)據(jù)類型就是表明一個(gè)變量可存儲信息的種類。分為:

1.基元型數(shù)據(jù)類型是值類型數(shù)據(jù)璃吧;
2.基元型數(shù)據(jù)主要指布爾型楣导、字符串型、整型和數(shù)值型等畜挨。
3.復(fù)雜型數(shù)據(jù)類型是引用類型數(shù)據(jù)筒繁;
4.復(fù)雜型數(shù)據(jù)包括對象型、數(shù)組型巴元、日期型毡咏、錯(cuò)誤對象、可擴(kuò)充的標(biāo)記語言對象等類型逮刨。

基元型數(shù)據(jù)類型比復(fù)雜型數(shù)據(jù)類型處理速度要快一些

1.?dāng)?shù)值型(Number)數(shù)據(jù):用于存儲和表示數(shù)字呕缭,數(shù)值型數(shù)據(jù)是一種雙精度浮點(diǎn)數(shù),包括整數(shù)、無符號整數(shù)和浮點(diǎn)數(shù)恢总。數(shù)值型數(shù)據(jù)使用64位雙精度格式來存儲數(shù)據(jù)迎罗。默認(rèn)值為NaN。
2.整型(int)數(shù)據(jù):一組介于-2147483648和2147483647之間的整數(shù)片仿∥瓢玻可以使用數(shù)字運(yùn)算符進(jìn)行數(shù)值處理。整型數(shù)據(jù)的變量默認(rèn)值為0滋戳。
3.字符串型(String)數(shù)據(jù):存儲字符對象钻蔑,字符包括字母、數(shù)字和標(biāo)點(diǎn)符號等奸鸯。在語句書寫過程中咪笑,字符串需要使用雙引號搭配使用,將字符書寫在雙引號之內(nèi)娄涩。使用“+”可以將多個(gè)字符串進(jìn)行連接和合并窗怒。字符串型數(shù)據(jù)的變量默認(rèn)值為null。
4.無符號整型(uint)數(shù)據(jù):取值范圍為0-4294967295蓄拣,是一個(gè)32位無符號整數(shù)扬虚。無符號數(shù)據(jù)類型的變量默認(rèn)值為0。
5.布爾型(Boolean)數(shù)據(jù):只有兩個(gè)值球恤,即“真(true)”和“假(false)”辜昵。布爾類型的變量默認(rèn)值為 false。
6.Null(空值)和void(未定義)數(shù)據(jù)類型:
Null數(shù)據(jù)類型只包含一個(gè)值Null咽斧,表示空堪置,即沒有值
void數(shù)據(jù)類型只包含一個(gè)值undefined,表示一個(gè)變量沒有定義张惹,該值只能賦予無類型變量(即缺乏類型注釋或使用*作為注釋的變量)舀锨。
7.Object數(shù)據(jù)類型:是ActionScript中所有類定義的基類。其實(shí)例的默認(rèn)值是null宛逗。
8.*(無類型):無類型變量只有一個(gè)值undefined坎匿。無類型數(shù)據(jù)用于用戶無法確定變量類型時(shí),便可以使用*來表示當(dāng)前定義的變量的類型未知雷激。

數(shù)據(jù)類型的轉(zhuǎn)換

1.隱式轉(zhuǎn)換(自動轉(zhuǎn)換)

由flash player在運(yùn)行時(shí)通過調(diào)用內(nèi)部轉(zhuǎn)換算法自動轉(zhuǎn)換

var a:String = "4";
var b:Number = 5;
trace(a+b+5);
//結(jié)果:455
//將變量b和5自動轉(zhuǎn)換為String類型

2.顯式轉(zhuǎn)換(強(qiáng)制轉(zhuǎn)換)

通過編寫代碼指示編譯器將一種數(shù)據(jù)類型轉(zhuǎn)換為另一種類型

var a:String = "4";
var b:Number = 5;
trace(a*b);
//結(jié)果:出錯(cuò)替蔬!
//改為:trace(int(a)*b);
//結(jié)果:20
//將變量a強(qiáng)制轉(zhuǎn)換為int類型
運(yùn)算符 執(zhí)行的運(yùn)算 運(yùn)算符 執(zhí)行的運(yùn)算
+ 加法 / 除法
- 減法 % 求模
* 乘法 null null
運(yùn)算符 執(zhí)行的運(yùn)算 運(yùn)算符 執(zhí)行的運(yùn)算
+= 加法賦值 /= 除法賦值
-= 減法賦值 %= 求模賦值
*= 乘法賦值 null null
運(yùn)算符 執(zhí)行的運(yùn)算 運(yùn)算符 執(zhí)行的運(yùn)算
< 小于 == 等于
> 大于 != 不等于
<= 小于等于 === 嚴(yán)格等于
>= 大于等于 !== 嚴(yán)格不等于
運(yùn)算符 執(zhí)行結(jié)果
&& 邏輯“與”運(yùn)算。當(dāng)兩個(gè)操作數(shù)均為true時(shí)屎暇,結(jié)果為true进栽。只要兩個(gè)操作數(shù)中有一個(gè)為false,運(yùn)算結(jié)果為false
或符號 邏輯“或”運(yùn)算恭垦。當(dāng)兩個(gè)操作數(shù)中有一個(gè)為true時(shí)快毛,結(jié)果為true格嗅。只有兩個(gè)操作數(shù)均為false時(shí),結(jié)果才為false
! 邏輯“非”運(yùn)算唠帝。當(dāng)操作數(shù)為true時(shí)屯掖,結(jié)果為false。當(dāng)操作數(shù)為false時(shí)襟衰,結(jié)果為true

4.運(yùn)算符 is\as

數(shù)據(jù)類型檢查符用于對數(shù)據(jù)類型進(jìn)行檢測贴铜,其包括is運(yùn)算符、as運(yùn)算符瀑晒、typeof運(yùn)算符和in運(yùn)算符绍坝。

is---測試變量或表達(dá)式是否為給定的數(shù)據(jù)類型,返回true或false

var mySprite:Sprite=new Sprite();
trace(mySprite is Sprite);-----------true
trace(mySprite is MovieClip);-------false

as---測試變量或表達(dá)式是否為給定的數(shù)據(jù)類型,返回表達(dá)式的值

var mySprite:Sprite=new Sprite();
trace(mySprite as Sprite);-----------[Object Sprite]
trace(mySprite as MovieClip);-------null

typeof---測試變量或表達(dá)式值的類型,返回?cái)?shù)據(jù)類型名

var a:Number;
trace(typeof(a)); -----------number

in---判斷屬性是否為特定對象的一部分

trace("PI" in Math);-----------true

5.程序結(jié)構(gòu) 選擇結(jié)構(gòu) if else if \switch case 循環(huán)結(jié)構(gòu) for in \foreach in 的區(qū)別

示例代碼

//if選擇結(jié)構(gòu)
if(condition1){
    statements1;
}
else if (conditiont2){
    statements2;
}
else if (conditiont3){
    statements3;
}
else {
    statements n;
}
//switch選擇結(jié)構(gòu)
switch(expression){
    case Clause1:
        statements1;break;
    case Clause2:
        statements2;break;
           default:
        statements;
}
//while循環(huán)結(jié)構(gòu)
while (condition){
    statements;
}
//do while循環(huán)結(jié)構(gòu)
do{
    statements;
}while(condition)
//for循環(huán)結(jié)構(gòu)
for ([init];[condition];[next]){
    statements;
}
//for in 循環(huán)結(jié)構(gòu)
for (variableIterant:String in object){
    statements;
}
//for each in 循環(huán)結(jié)構(gòu)
for each(variableIterant in object){
    statements;
}

for in和for each in的區(qū)別

for each…in循環(huán)用于循環(huán)訪問集合中的項(xiàng)目苔悦,這個(gè)集合可以是XML或XMLList對象中的便簽轩褐、對象的屬性值或數(shù)組中的元素。

**for…in **語句不同玖详,該語句的迭代變量包含屬性所包含的值把介,而不是屬性的名稱。

var jh:XML=<jhj>;
<mz> 廣東 </mz>;
<mz> 醫(yī)藥 </mz>;
<mz> 大學(xué) </mz>;
</jhj>;
>
for each(var i:String in jh.mz){
    trace(i);
}
>
for(var j:String in jh.mz){
    trace(jh.mz[j]);
}
>
輸出:
廣東
醫(yī)藥
大學(xué)
廣東
醫(yī)藥
大學(xué)
>

6.函數(shù) function my_fun()

ActionScript 3.0中有兩類函數(shù):方法和函數(shù)閉包

方法:如果將函數(shù)定義為類定義的一部分或?qū)⒑瘮?shù)附加到對象的實(shí)例蟋座,則該函數(shù)就稱為方法

函數(shù)閉包:以其他的任何方式定義函數(shù)拗踢,則該函數(shù)稱為函數(shù)閉包。在對象或類之外的位置執(zhí)行函數(shù)向臀,都會創(chuàng)建函數(shù)閉包

(1)函數(shù)語句
function 函數(shù)名(參數(shù)1:類型,參數(shù)2:類型…) {…………. }
例如:

function hs(cs:Number){
    trace(cs*10);
}
>
hs("hello world");

(2) 函數(shù)表達(dá)式
var 變量名:Function=function(參數(shù)1:類型,參數(shù)2:類型…) { …………. };
例如:

var hs:Function=function(shuju:String){
    trace(shuju);
};
>
hs("hello world");

值傳遞和引用傳遞的區(qū)別

>
//1.按值來傳遞參數(shù)
functin cs(a:int,b:int):void{
    a*=5;
    b*=6;
    trace(a,b);
}
var m:int=5,n:int=6;
cs(m,n);
trace(m,n);
>
//m,n的值沒改變
>
>
>
//2.按引用傳遞參數(shù)
function cs(myObj:Object):void{
    myObj.a*=5;
    myObj.b*=6;
    trace(myObj.a, myObj.b);
}
var objA:Object={a:5,b:6};
cs(objA);
trace(objA.a, objA.b);
>
//對象objA的a巢墅、b屬性值變?yōu)?5和36
>
>
>
//3. 參數(shù)…(rest)
//參數(shù)…(rest)可以用來指定一個(gè)數(shù)組參數(shù),以接受任意個(gè)逗號分隔的參數(shù)券膀,參數(shù)聲明必須是最后一個(gè)指定的參數(shù)
var m:int = 0;
function cs(n:int,...abc)
{
    for (var i:uint=0; i<abc.length; i++) {
        m +=  abc[i];
    }
    trace(m);
}
cs(5,6,7,8,9);
>
//結(jié)果為n=5,abc[0]=6,abc[1]=7,abc[2]=8,abc[3]=9
//所以 6+7+8+9 =30
>
//4. 對象argumens
//對象argumens是一個(gè)數(shù)組君纫,包含傳遞給函數(shù)的所有參數(shù)。在程序中三娩,可以使用對象argumens來訪問有關(guān)傳遞給函數(shù)的參數(shù)信息庵芭。
var m:int = 0;
function cs(a:int,b:int,c:int){
    for (var i:uint=0; i< arguments.length; i++) {
        m +=  arguments[i];
    }
    trace(m);
}
cs(5,6,7);
>
//結(jié)果:18(5妹懒、6雀监、7的和)
>

函數(shù)的嵌套和遞歸

function qiantao():String{
    function qiantaoA():String{
        return "這是";
    }
    function qiantaoB():String{
        return "函數(shù)的嵌套";
    }
    return qiantaoA()+ qiantaoB();
}
trace(qiantao());

函數(shù)的遞歸調(diào)用

function digui(x){
    if(x==0||x==1){
        return 1;
    }
    else{
        return x+digui(x-1);
    }
}
trace(digui(10));

三、第三章(重點(diǎn))

1.鼠標(biāo)事件 on over...
2.鍵盤事件 KEY_UP KEY_DOWN keyCode charCode KeyboardEvent
3.幀頻事件 ENTET_FRAME
4.計(jì)時(shí)器事件 Timer(間隔時(shí)間毫秒,循環(huán)次數(shù)) start() complete
5.事件處理函數(shù) addEventListerner()
6.事件處理一般過程

| 事件 | 事件描述 |
| --- |: ----:|
| MouseEvent.CLICK | 用戶在交互對象上按下并釋放鼠標(biāo)主按鍵時(shí)發(fā)生 |
| MouseEvent.DOUBLE_CLICK | 用戶在交互對象上快速連續(xù)按下并釋放鼠標(biāo)主按鍵兩次時(shí)發(fā)生 |
| MouseEvent.MOUSE_DOWN | 用戶在交互對象上按下鼠標(biāo)主按鍵時(shí)發(fā)生 |
| MouseEvent.MOUSE_UP | 用戶在交互對象上釋放鼠標(biāo)主按鍵時(shí)發(fā)生 |
| MouseEvent.MOUSE_OVER | 用戶將鼠標(biāo)光標(biāo)移到交互對象上時(shí)發(fā)生 |
| MouseEvent.MOUSE_OUT | 用戶將鼠標(biāo)光標(biāo)移出交互對象時(shí)發(fā)生 |
| MouseEvent.MOUSE_MOVE | 用戶在交互對象上移動光標(biāo)時(shí)發(fā)生 |
| MouseEvent.MOUSE_WHEEL | 用戶在交互對象上轉(zhuǎn)動鼠標(biāo)滾輪時(shí)發(fā)生 |
| KeyboardEvent.KEY_DOWN | 用戶按下某個(gè)鍵時(shí)發(fā)生 |
| KeyboardEvent.KEY_UP | 用戶釋放某個(gè)鍵時(shí)發(fā)生 |
| ContexMenuEvent.MENU_ITEM_SELECT | 用戶在交互對象相關(guān)聯(lián)的上下文菜單選擇時(shí)發(fā)生 |
| Event.ENTER_FRAME | 以幀頻觸發(fā) |
| TimerEvent.TIMER | Timer對象在每次達(dá)到指定時(shí)間間隔時(shí)發(fā)生 |
| TimerEvent.TIMER_COMPLETE | 將Timer實(shí)例設(shè)置為固定的間隔數(shù)眨唬,在達(dá)到最后依次間隔時(shí)觸發(fā) |

Flash的事件處理過程

//定義偵聽器函數(shù)
function  eventResponse(eventObject:EventType):void {
                函數(shù)處理的代碼
}
//在事件目標(biāo)上添加某種事件的偵聽器
eventTarget.addEventListener(EventType.EVENT_NAME, eventResponse);

使用startDrag()

startDrag()方法可以讓用戶拖動指定的對象会前,該對象將一直保持跟隨鼠標(biāo)的可拖動狀態(tài),直到使用stopDrag()方法停止拖動或有另外一個(gè)對象可拖動為止
使用方法:
對象.startDrag(lockCenter:Boolean,bounds:Rectangle)
lockCenter:Boolean—指定可拖動對象是否鎖定在鼠標(biāo)位置中央匾竿,為true時(shí)瓦宜,對象將鎖定在鼠標(biāo)位置中央,否則岭妖,對象將鎖定在首次單擊該對象的位置上
>
Mouse.hide();                           //隱藏鼠標(biāo)指針
var myCursor:myCur=new myCur();     // 創(chuàng)建myCur類的實(shí)例
>
//代碼中的stage可以用this代替临庇,代表當(dāng)前舞臺
stage.addChild(myCursor);           //放置自定義鼠標(biāo)指針實(shí)例
stage.addEventListener(MouseEvent.MOUSE_MOVE,moveMycur);//創(chuàng)建事件偵聽器
>
function moveMycur(e:MouseEvent):void {
    //使用startDrag()方法拖動指針實(shí)例
    myCursor.startDrag(true);
}

使用mouseMove

Mouse.hide();
stage.addEventListener("mouseMove",moveCur);
function moveCur(m:MouseEvent ) {
    vLine.x = mouseX;    //垂直放置的線與鼠標(biāo)x坐標(biāo)重合
    hLine.y = mouseY;   //水平放置的線與鼠標(biāo)y坐標(biāo)重合
    scope.x = mouseX;    //瞄準(zhǔn)器的坐標(biāo)與鼠標(biāo)重合
    scope.y = mouseY;
    m.updateAfterEvent();  //不是必需
}
//常量“mouseMove”相當(dāng)于MouseEvent.MOUSE_MOVE
//updateAfterEvent()用于強(qiáng)制更新顯示畫面(不必等到下一幀)

元件有4種狀態(tài)反璃,由4個(gè)用來描述響應(yīng)與鼠標(biāo)交互的關(guān)鍵幀表示

**Up(彈起):**光標(biāo)不在按鈕上時(shí)按鈕的狀態(tài)
**Over(指針經(jīng)過):**光標(biāo)在按鈕上時(shí)按鈕的狀態(tài)
**Down(按下):**光標(biāo)在按鈕上鼠標(biāo)按鍵按下時(shí)按鈕的顯示狀態(tài)
**Hit(點(diǎn)擊):**按鈕的熱區(qū)(制作透明按鈕,其形狀決定了按鈕的相應(yīng)區(qū)域)假夺。

與按鈕交互行為有關(guān)的幾個(gè)屬性:

**mouseEnable:**是否能捕獲鼠標(biāo)事件
**useHandCursor:**手形指針是否顯示
**tabEnable:**按Tab鍵是否可以使按鈕依次獲得焦點(diǎn)

按鈕的4個(gè)狀態(tài):彈起淮蜈、指針經(jīng)過、按下已卷、點(diǎn)擊

Paste_Image.png

hitTestState的用法

//1.新建一個(gè)名為“響應(yīng)區(qū)域”的影片剪輯元件梧田,在該元件的“元件屬性”對話框中單擊“高級”按鈕,勾選“為ActionScript導(dǎo)出”復(fù)選框侧蘸,在“類”文本框中輸入類名“hit_Area”
>
//2.在“正方體1”影片剪輯的時(shí)間軸面板中創(chuàng)建一個(gè)名稱為“動作”的新圖層裁眯,在其第1幀輸入以下代碼:
>
stop();
var hit_A:hit_Area=new hit_Area();   //創(chuàng)建hit_Area類的實(shí)例
hit_btn.**hitTestState** = hit_A;  //設(shè)置按鈕實(shí)例hit_btn的“點(diǎn)擊”幀
hit_btn.addEventListener(MouseEvent.MOUSE_OVER,playMC);  //添加事件偵聽器
function playMC(myEvent:MouseEvent){
    play();
}

KeyboardEvent類

在 ActionScript 3.0 中,任何對象都可以通過偵聽器的設(shè)置來鍵控加諸于對象的鍵盤動作讳癌,而與鍵盤相關(guān)的動作事件均歸屬于KeyboardEvent類
鍵盤事件有兩種類型:KeyboardEvent.KEY_DOWN事件和KeyboardEvent.KEY_UP事件
在編寫程序時(shí)穿稳, 通過獲取KeyboardEvent類對象的keyCode屬性和charCode屬性值,可以判斷按下的按鍵是哪個(gè)析桥,以便觸發(fā)對應(yīng)的動作

keyCode :按鍵碼司草,為數(shù)值,對應(yīng)鍵盤上的按鍵泡仗。
charCode:字符碼埋虹,該鍵在當(dāng)前字符集中的數(shù)值。(默認(rèn)字符集是 UTF-8娩怎,它支持 ASCII搔课。)

keyCode值與字符值之間的主要區(qū)別:
1.按鍵碼表示鍵盤上的一個(gè)按鍵(如主鍵盤區(qū)中的數(shù)字8和*是同一個(gè)按鍵,具有相同的按鍵碼截亦;而主鍵盤區(qū)中的數(shù)字8與小鍵盤上的 8不是同一個(gè)鍵爬泥,因此它們的按鍵碼不同)
2.字符碼代表計(jì)算機(jī)可讀取和呈現(xiàn)的特定字符(R 與 r 的字符字符碼是不同的)

stage.addEventListener(KeyboardEvent.KEY_DOWN,getCode);
function getCode(me:KeyboardEvent){
    char_txt.text=String(me.charCode);
        key_txt.text=String(me.keyCode);
    in_txt.text=String.fromCharCode(me.charCode);
}

注意:fromCharCode()方法傳回參數(shù)中Unicode字符碼代表的字符所組成的字符串

stage.addEventListener(KeyboardEvent.KEY_DOWN,showKey);
function showKey(me:KeyboardEvent){
    switch (me.keyCode){
        case Keyboard.UP :
            key_txt.text="UP鍵";
            break;
        case Keyboard.DOWN :
            key_txt.text="DOWN鍵";
            break;
        case Keyboard.LEFT :
            key_txt.text="LEFT鍵";
            break;
        case Keyboard.RIGHT :
            key_txt.text="RIGHT鍵";
            break;
    }
}

ActionScript 3.0中,Timer類在每次達(dá)到指定的時(shí)間間隔時(shí)都會觸發(fā)計(jì)時(shí)器事件崩瓤;
首先用Timer方法創(chuàng)建Timer類的實(shí)例袍啡,設(shè)定產(chǎn)生計(jì)時(shí)器事件的時(shí)間間隔以及在停止前生成事件的次數(shù)

Timer類常用的屬性:

currentCount:int--計(jì)時(shí)器從0開始后觸發(fā)的總次數(shù)
delay:Number--計(jì)時(shí)器事件間的延遲時(shí)間,單位毫秒
repeatCount:int--計(jì)時(shí)器運(yùn)行總次數(shù)却桶,為0則為無限次
running:Boolean--計(jì)時(shí)器當(dāng)前狀態(tài)境输,正在運(yùn)行為true

Timer對象在每次達(dá)到指定的事件間隔時(shí)都會調(diào)度TimerEvent對象,該對象的事件類型是timer颖系,用常量TimerEvent.TIMER來定義

當(dāng)?shù)竭_(dá)最后一次事件間隔時(shí)嗅剖,會觸發(fā)timerComplete事件,該事件由TimerEvent.TIMER_COMPLETE常量定義

digital.gotoAndStop(11)
charc.stop()

//定義計(jì)時(shí)器嘁扼,時(shí)間間隔為1000毫秒信粮,重復(fù)10次
var delay:uint=1000
var repeat:uint=10
var myTimer:Timer=new Timer (delay,repeat)

//為【START】按鈕添加事件偵聽器和事件響應(yīng)函數(shù)
btn_S.addEventListener(MouseEvent.CLICK,start_T)

//點(diǎn)擊事件偵聽器
function start_T(m:MouseEvent ):void{
    myTimer.reset();            //計(jì)時(shí)器復(fù)位
    myTimer.start();                      //開始計(jì)時(shí)
    charc.gotoAndStop(1);             //“角色”影片剪輯播放頭移到開頭
    digital.gotoAndStop(11);    //倒計(jì)時(shí)數(shù)字影片剪輯的播放頭回到初始位置
}

//定義事件偵聽器
myTimer.addEventListener(TimerEvent.TIMER,play_Digital);

//創(chuàng)建事件響應(yīng)函數(shù),每間隔1秒更改顯示數(shù)字
function play_Digital(e:TimerEvent ):void{
    digital.gotoAndStop(repeat);
    repeat--;
}

//添加TIME_COMPLETE事件偵聽器
myTimer.addEventListener (TimerEvent.TIMER_COMPLETE ,c_Down)
function c_Down(e:TimerEvent ):void{
    charc.play();
    repeat=10;
}

四趁啸、第四章

1.對象的添加\移除 addChild removeChild
2.改變對象的外觀 width height scaleX scaleY alpha color:RGB
3.對時(shí)間軸和舞臺的控制 gotoAndPlay gotoAndStop prerFrame nextFrame

具體方法

addChild()方法:可以將一個(gè)子實(shí)例添加到顯示對象容器中强缘;

addChild()的使用方法:
DisplayObjectContainer.addChild(child:DisplayObject)
child:DisplayObject是作為DisplayObjectContainer實(shí)例的子對象添加到DisplayObject的實(shí)例督惰,子對象被添加到該DisplayObjectContainer實(shí)例中的其他所有子對象的上面。
如果添加一個(gè)已將其他顯示對象容器作為父對象的子對象旅掂,則會從其他顯示對象容器的子列表中刪除該子對象姑丑。

addChildAt()方法:將子實(shí)例添加到對象容器中,可以指定顯示對象添加到容器中的層級辞友;

addChildAt()方法的使用方法:
DisplayObjectContainer.addChildAt(child:DisplayObject,index:int);
 index:int—添加該子對象的索引位置栅哀,其值為0代表將顯示對象添加到顯示列表的最底層(可能被其上層的遮蓋);
 index值大的實(shí)例位于上層

addChild()方法是按照對象加入的先后順序來確定對象在顯示列表中的層級位置称龙,先加入的位于下層留拾,后加入的位于上層;

使用addChildAt()方法將一個(gè)對象添加到某個(gè)已經(jīng)有對象的索引位置鲫尊,則該位置及其更高位置上的子對象都將上移一層

清除屏幕上的顯示對象用到以下兩種方法:

removeChild()方法:必須使用一個(gè)要移除的顯示對象的引用參數(shù)

DisplayObjectContainer.removeChild(child:DisplayObject);
其中child:DisplayObject是要?jiǎng)h除的對象名稱

removeChildAt()方法:刪除顯示列表中指定索引位置上的對象

DisplayObjectContainer.removeChildAt(index:int);
其中index:int為需要?jiǎng)h除的顯示對象的索引號
在ActionScript 3.0中痴柔,顯示對象容器中的每個(gè)子對象列表都在內(nèi)部緩存為一個(gè)數(shù)組;
numChildren屬性:顯示對象容器的這個(gè)屬性表明容器中的子對象的個(gè)數(shù)。
在顯示對象容器的內(nèi)部保留的顯示對象列表的順序決定了對象在屏幕上的顯示的屬性疫向。索引值為0的對象位于列表的最底層咳蔚,索引值為1的對象位于其上層,依次類推搔驼。這些位置編號間是沒有空缺的谈火。

setChildIndex()方法:更改顯示對象列表中對象的索引號

DisplayObjectContainer.setChildIndex(child:DisplayObject,index:int)
其中child:DisplayObject為要更改索引號的對象實(shí)例,index:int為目標(biāo)索引號

MovieClip對象常用的方法

play()舌涨、gotoAndPlay(scene,frame)
stop()糯耍、 gotoAndStop(scene,frame)
prevFrame()、nextFrame()

MovieClip對象常用的屬性

 currentFrame
 totalFrames
 currentLabel
 currentScene

五囊嘉、第五章

1.移動 x\y

temp.x +=5;
temp.y +=5;

六温技、第六章(重點(diǎn))

1.基本碰撞檢查 hitTestObejct hitTestPoint
2.多個(gè)對象的碰撞檢測 2層循環(huán) 隕石那題
3.特殊碰撞的檢測
4.什么是碰撞檢測?碰撞檢測在游戲當(dāng)做有什么作用扭粱?各自的優(yōu)勢是什么舵鳞?哪些情況下需要使用哪種碰撞檢測

1、碰撞檢測的概念和方法

游戲中的碰撞檢測琢蛤,簡單地說蜓堕,就是判斷兩個(gè)顯示實(shí)例是否有在同一時(shí)刻,某個(gè)部分處在了同一位置上虐块。
碰撞檢測就是判斷有可能發(fā)生碰撞的顯示實(shí)例俩滥,在某一時(shí)刻是否有重疊的情況發(fā)生嘉蕾。

Flash游戲中物體之間的碰撞檢測技術(shù)主要有兩大類:

  • 1.基于包圍盒的碰撞檢測技術(shù)--hitTestObject方法贺奠;
  • 2.基于像素的碰撞檢測技術(shù)--hitTestPoint方法

Flash中的DisplayObject類內(nèi)置的兩種碰撞檢測方法:

  • 1.hitTestObject方法用于判斷兩個(gè)顯示對象間是否發(fā)生了碰撞,是基于包圍盒的碰撞檢測技術(shù)错忱;
  • 2.hitTestPoint方法用于判斷某個(gè)點(diǎn)與顯示對象間是否發(fā)生了碰撞儡率,是基于像素的碰撞檢測技術(shù)挂据。

判斷movieclip1與movieclip2碰撞處理的代碼如下:

    if(movieclip1.hitTestObject(movieclip2))
    {
        //碰撞后的動作
    }

如果兩個(gè)影片發(fā)生了碰撞則返回true,并執(zhí)行if語句塊的內(nèi)容儿普。這種碰撞檢測方法簡單崎逃,但其精確度較差。原因如下圖所示:從表面上看眉孩,很明顯應(yīng)該只有兩個(gè)正方形碰到了

Paste_Image.png
Paste_Image.png

hitTestPoint方法中有兩個(gè)Number類型的參數(shù)个绍,表示x,y坐標(biāo),用于定位點(diǎn)浪汪。根據(jù)顯示實(shí)例是否與某點(diǎn)相交巴柿,返回true或false。

最基本的形式如下:

objectA.hitTestPoint(x,y,shapeflag);
shapeflag:為true時(shí)死遭,將在檢測碰撞時(shí)判斷對象中的可見圖形而非僅憑矩形邊界來判斷
可以在if語句中使用它來判斷碰撞為true時(shí)要執(zhí)行的代碼广恢,F(xiàn)lash只檢查給出的點(diǎn)是否在影片剪輯的矩形邊界內(nèi)。

例如呀潭,判斷對象sprite是否與點(diǎn)(100,100)發(fā)生了碰撞:

    if(sprite.hitTestPoint(100,100)){
        //碰撞后的動作
    }

利用距離來檢測碰撞

根據(jù)需要設(shè)定兩個(gè)對象之間允許的最小距離钉迷,當(dāng)對象間的距離小于這個(gè)距離時(shí),就可以確定這2個(gè)對象是發(fā)生了碰撞了
計(jì)算屏幕上的對象objectA和objectB之間的距離:
>
var dx:Number=objectA.x-objectB.x
var dy:Number=objectA.y-objectB.y
var distance:Number=Math.sqrt(dx*dx+dy*dy)

當(dāng)屏幕上存在著多個(gè)對象時(shí)钠署,需要判斷它們彼此之間是否發(fā)生碰撞糠聪;
使用循環(huán)的嵌套,實(shí)現(xiàn)多個(gè)運(yùn)動對象的碰撞檢測

//注意:
//外層循環(huán)是i= 0 ;i <numObjects-1;i++
//內(nèi)層循環(huán)是j=i+1;j<numObjects;j++
>
for (var i:uint = 0; i < numObjects - 1; i++){
    var objectA = objects[i];   //從數(shù)組中獲取實(shí)例
    for (var j:uint = i + 1; j < numObjects; j++){
        var objectB = objects[j];     //同上
        if (objectA.hitTestObject(objectB)){
            statements;
          }
    }
}

九谐鼎、第九章

1.關(guān)于音樂的加載 嵌入 Sound() UrlRequest() .play() .stop() .load() SoundChannel() SoundTramsform

創(chuàng)建一個(gè)新的Sound枷颊,并讓其自動加載該聲音文件:

var req:URLRequest = new URLRequest("click.mp3");
var s:Sound = new Sound(req);

上面兩條語句可以合為以下:

var s:Sound = new Sound(new URLRequest("click.mp3"));
//注意:加載的聲音文件要與源文件放在同一目錄中
s.load(req);
var channel = s.play(0,int.MAX_VALUE);  //play(startTime:Number=0,loops:int=0)
s.close();
var changeForm = new SoundTramsform()
channel.soundTransform = changeForm;
channel.positon
>
changeForm.volume = 0.5
st=>start: URLRequest類 加載
e=>end:SoundTransform類 控制
op1=>operation: Sound類(URLRequest類)
op2=>operation: SoundChannel = Sound類.play()方法
op3=>operation: SoundTransform類 = SoundChannel類.soundTransform屬性
st->op1->op2->op3->e

實(shí)驗(yàn)題

實(shí)驗(yàn)1:基本沒
實(shí)驗(yàn)2: 2 (1) (4) 3(1) (3) (4)
實(shí)驗(yàn)3:(一)2 (二) 1 2
實(shí)驗(yàn)4:(一)2 (二)
實(shí)驗(yàn)5:1 3

參考代碼

package  {
  import flash.display.MovieClip;

  public class shiyan2 extends MovieClip {

      public function shiyan2() {
          // constructor code
          trace("第一題");


          trace("答案1");
          var a:String = "12.3";
          var b:int = 4;
          trace(a+b);
          //加法int轉(zhuǎn)為了字符串 答案是12.34


          trace("答案2");
          var a:String = "12.3";
          trace("編譯無法通過");
          //var b:int =a;
          //trace(a+b);
          //string無法賦值給int類型


          trace("答案3");
          var a:String = "12.3";
          var b:int =int(a);
          trace(a+b);
          //int(a)=12 字符串a(chǎn)+b=12.312


          trace("答案4");
          var a:String = "12.3";
          var b:int =int(a);
          trace(b+10);
          //int(a)=12 a+b=22


          trace("常量的聲明和使用");
          const SECONDS:uint=60;
          trace("One minute = ", SECONDS,"seconds.");
          //SECONDS =61;
          //trace("One minute = ", SECONDS,"seconds.");
          trace("編譯無法通過");
          //常量const被定義無法修改


          trace("關(guān)系運(yùn)算符及關(guān)系表達(dá)式的求值");
          var a1:Number = 100.1;
          var b1:Number = 100;
          trace("a>b is ",a1>b1);
          trace("ABC > abc is", "ABC">"abc");
          //變量值的比較和字符串值的比較不一樣


          trace("函數(shù)及其調(diào)用");
          function stuInfo(stu:Object):void{
              stu.name = "bb";
              trace(stu.name);
          }
          var myObj:Object = {name:"aa",age:18,dclass:"dm11"};
          stuInfo(myObj);
          trace(myObj.name);
          //函數(shù)內(nèi)部作用域,執(zhí)行stuInfo(myObj)時(shí)把myObj傳入了整個(gè)對象進(jìn)去该面,并把其中的.name修改成了"bb",則先輸出bb夭苗。之后trace(myObj.name)輸出的是被修改之后的bb


          trace("程序的功能是求10個(gè)數(shù)中的最大值(順序、選擇隔缀、循環(huán)結(jié)構(gòu)题造,簡單算法");
          var a2:Array = new Array(10);
          var temp:uint = 0;
          a2 = [12,32,56,48,15,35,78,19,65,68];
          for (var i:uint=0; i<a2.length-1; i++) {
              if (a2[i] > a2[i + 1]) {
                  temp = a2[i];
                  a2[i] = a2[i + 1];
                  a2[i + 1] = temp;
              }
          }
          trace("最大的元素值=",a2[a2.length-1]);
          //冒泡排序法 最大數(shù)換到最后一位


          trace("程序的功能是用選擇排序法將10個(gè)整數(shù)降序排序")
          var myArr:Array = new Array();
          myArr = [12,56,32,9,15,23,87,123,26,5,36,19];
          var k:int,temp2:int;
          trace("排序前",myArr);
          for (var j:uint=0;   j<myArr.length     ; j++) {
              k = j;
              for (var i:uint=j+1; i<myArr.length; i++) {
                  if (myArr[k] < myArr[i]) {
                      k=i ;
                  }
              }
              temp2 = myArr[j];
              myArr[j] = myArr[k];
              myArr[k] = temp2;
          }
          trace("排序后",myArr);
          //選擇排序法 找最小數(shù)字 放在最后一個(gè)位置


          trace("程序的功能是顯示XML集合中fname節(jié)點(diǎn)的內(nèi)容");
          var myXML:XML = <users>
                <fname>二維動畫</fname>
                <fname>平面設(shè)計(jì)</fname>
                <fname>視頻編輯</fname>
                         </users>;
          for each (var i2 in  myXML.fname ){
              trace(i2);
          }
          //foreach遍歷myXML


          trace("程序的功能是定義一個(gè)數(shù)組和一個(gè)對象,并分別調(diào)用typeInfo函數(shù)猾瘸,分別輸出數(shù)組中的各個(gè)元素界赔、對象中的各個(gè)屬性");
          function typeInfo(obj2){
              if (obj2 is Array) {
                  //用is判斷參數(shù)類型
                  trace("數(shù)組中的元素包括:");
              }
              else if (obj2 is Object) {
                  trace("對象中的屬性包括:");
              }
              for (var i3 in obj2) {
                  //輸出參數(shù)中的各項(xiàng)內(nèi)容
                  trace(i3,"=",obj2[i3]);
              }
          }
          //定義一個(gè)數(shù)組和一個(gè)對象,并分別調(diào)用函數(shù)
          var myArr:Array = [100,200,300];
          var myObj:Object = {name:"王明亮",age:30,height:180};
          typeInfo(myArr);
          typeInfo(myObj);
          //for ( go in All) go 迭代訪問變量



          trace("通過類的定義與繼承牵触、接口的聲明與實(shí)現(xiàn)淮悼,輸出如下信息");
          /*
          //Pet.as中定義了一個(gè)寵物類Pet
          package{
              public class Pet{
                  public var master:String = "亨利";//master用于存儲主人的消息
                  public var name:String;           //name用于存儲寵物的名字
              }
          }
          //IPet.as中聲明了一個(gè)接口IPet
          package{
              public   interface  IPet{
                  function eat();
                  function sleep();
                  function run();
              }
          }
          //Dog.as中定義了一個(gè)繼承自Pet類的子類Dog,并實(shí)現(xiàn)接口IPet中的各個(gè)方法
          package{
              public class Dog  extend Pet implements IPet    {
                  public function Dog(name:String){
                      this.name = name;     //在構(gòu)造函數(shù)中揽思,傳遞參數(shù)為小狗的名字
                  }
                      //實(shí)現(xiàn)接口的eat方法
                  public function eat(){
                      trace(  this.master  +"喂" +   this.name   + "吃東西");
                  }
                      //實(shí)現(xiàn)接口的sleep方法
                  public function sleep(){
                      trace(this.name + "睡著了");
                  }
                      //實(shí)現(xiàn)接口的run方法
                  public function run(){
                      trace(this.name + "歡快地跳著");
                  }
              }
          }
          //inf.fla時(shí)間軸第一幀上添加代碼:
          var myDog:Dog =   new Dog("旺仔") ;
          myDog.run();
          myDog.eat();
          myDog.sleep();
          */

          trace("編寫一個(gè)計(jì)算從n1到n2累加和的函數(shù)mysum(n1:uint,n2:uint)袜腥,通過調(diào)用該函數(shù),輸出從1到100的累加和(正確結(jié)果是5050)");

          function mysum(n1:uint,n2:uint){
              if(n2 == n1){
                  return n1;
              }else{
                  return mysum(n1,n2-1)+n2;
              }
          }
          trace(mysum(1,100));
          // 遞歸


          trace("編寫一個(gè)計(jì)算整數(shù)n的階乘的遞歸函數(shù)fac(n:uint):uint钉汗,通過調(diào)用該函數(shù)羹令,輸出5的階乘(正確結(jié)果是120)");
          function fac(n:uint):uint{
              if(n==1){
                  return n;
              }else{
                  return n*fac(n-1);
              }
          }
          trace(fac(5));
          // 遞歸

      }
  }
}


package  {

  import flash.display.MovieClip;
  import flash.events.KeyboardEvent;
  import flash.events.Event;

  public class sy3 extends MovieClip {


      public function sy3() {

          stop();

          trace("kaishi")

          var frameNumber:Number;
          frame_N();
          //自定義函數(shù)鲤屡,用于獲取當(dāng)前幀
          stage.addEventListener(KeyboardEvent.KEY_DOWN, change_F); //偵聽鍵被按下事件

          function change_F(me:KeyboardEvent):void {

              switch (me) {
                   //判斷按下了什么鍵
                  case Keyboard.RIGHT :
                      if (frameNumber==this.totalFrames) { //是最后一幀?
                          this. gotoAndStop(1);     //是福侈,跳轉(zhuǎn)到第一幀
                      }
                      else {
                          this.nextFrame();        //不是酒来,跳轉(zhuǎn)到下一幀
                      }
                      frame_N();
                      break;
                  case Keyboard.LEFT :
                      if (frameNumber == 1) {  //是第一幀?
                          this.gotoAndStop(this.totalFrames);//到最后一幀
                      }
                      else {
                          this.prevFrame();        //跳轉(zhuǎn)到上一幀
                      }
              }
              frame_N();
          }

          function frame_N():void
          {
              frameNumber = this.currentFrame;           //獲取當(dāng)前幀編號
              j_txt.text   = String(frameNumber);    //在文本框中顯示幀編號
          }


      }
  }

}

package  {
  import flash.display.MovieClip;
  import flash.events.Event;

  public class shiyan4 extends MovieClip {
      public function shiyan4() {

          /*
          var ball:MovieCircle= new MovieCircle() ;  //創(chuàng)建一個(gè)MoveCircle類的實(shí)例ball
          var di:int = 1;                    //控制左右移動方向變量肪凛,右為 1堰汉,左為 -1
          stage.addChild(ball) ;    //將實(shí)例ball添加到舞臺
          ball.x = 0;
          ball.y = Math.round(Math.random()*400) ; // 控制小球在窗口的高度(400)范圍內(nèi)出現(xiàn)
          stage.addEventListener(Event.ENTER_FRAME , Move);  //幀頻事件
          function Move(e:Event):void{
              if (ball.x>( stage.stageWidth-ball.width)){   //小球右移超出舞臺邊界時(shí)
                  di = -1;
              }
              if (ball.x < 0) {
                  di = 1;
              }
              ball.x +=  5 * di;
          }
          */
          var di:Array = new Array();
          var mcs:Array = new Array();
          for(var i:uint=0; i<5; i++){
              di[i] = new int(1);
              mcs[i] = new MC();
              mcs[i].width = (i+1)*10;
              mcs[i].height = (i+1)*10;mcs[i].x = 0;
              mcs[i].y = 20 + (i+1)*mcs[i].height;
              stage.addChild(mcs[i]);  //將第i個(gè)實(shí)例添加到舞臺
          }
          stage.addEventListener(Event.ENTER_FRAME, Move);    //幀頻事件
          function Move(e:Event):void{
              for(i=0;i<5;i++){
                  if(mcs[i].x>(stage.stageWidth-mcs[i].width)) //實(shí)例右移超出舞臺邊界時(shí)
                      di[i]= -1;
                  if(mcs[i].x < 0 )
                      di[i]= 1;
                  mcs[i].x += 5*di[i];
              }
          }

      }
  }

}






***

## 教材

范例6-5
范例9-2 架子鼓
范例9-3 音樂的開關(guān)
P327 最后一行 改成channel = backSound.play(0,1000000);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市伟墙,隨后出現(xiàn)的幾起案子衡奥,更是在濱河造成了極大的恐慌,老刑警劉巖远荠,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矮固,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門辈毯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來租冠,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵尼摹,是天一觀的道長。 經(jīng)常有香客問我剂娄,道長蠢涝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任阅懦,我火速辦了婚禮和二,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耳胎。我一直安慰自己惯吕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布怕午。 她就那樣靜靜地躺著废登,像睡著了一般。 火紅的嫁衣襯著肌膚如雪郁惜。 梳的紋絲不亂的頭發(fā)上堡距,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼吏颖。 笑死,一個(gè)胖子當(dāng)著我的面吹牛恨樟,可吹牛的內(nèi)容都是我干的半醉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼劝术,長吁一口氣:“原來是場噩夢啊……” “哼缩多!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起养晋,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤衬吆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后绳泉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逊抡,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年零酪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冒嫡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡四苇,死狀恐怖孝凌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情月腋,我是刑警寧澤蟀架,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站榆骚,受9級特大地震影響片拍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妓肢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一穆碎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧职恳,春花似錦所禀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至操禀,卻和暖如春褂策,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工斤寂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耿焊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓遍搞,卻偏偏與公主長得像罗侯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子溪猿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容