Flash基礎(chǔ)理論課第二章ActionScript30動畫基礎(chǔ)Ⅰ-電腦資料_第1頁
Flash基礎(chǔ)理論課第二章ActionScript30動畫基礎(chǔ)Ⅰ-電腦資料_第2頁
Flash基礎(chǔ)理論課第二章ActionScript30動畫基礎(chǔ)Ⅰ-電腦資料_第3頁
Flash基礎(chǔ)理論課第二章ActionScript30動畫基礎(chǔ)Ⅰ-電腦資料_第4頁
Flash基礎(chǔ)理論課第二章ActionScript30動畫基礎(chǔ)Ⅰ-電腦資料_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Flash

基礎(chǔ)理論課第二章ActionScript3.0基礎(chǔ)Ⅰ-電腦資料

動畫返回“Flash基礎(chǔ)理論課-目錄”類和面向?qū)ο缶幊填?Class)和面向?qū)ο?ObjectOriented),關(guān)于有些讀者來說可能還沒接觸過而有些讀者可能已經(jīng)在AS(或其余語言)中使用過好多年了,為了讓大家都能學(xué)會,我會簡要的介紹一下這些基礎(chǔ)知識,一個類最基本的兩個部分:屬性(數(shù)據(jù)或信息),行為(動作或它能做的事)。屬性(Property)指用于保留與該類有關(guān)的信息變量,行為(Behavior)就是指函數(shù),如果一個函數(shù)是這個類中的一部分,那么我們就稱它為方法(Method)。一個基本的類:常用Flash的朋友都知道,我們能夠在庫中創(chuàng)立一個元件,用這個元件能夠在舞臺上創(chuàng)立出好多的實(shí)例。與元件和實(shí)例的關(guān)系相同,類就是一個模板,而對象(好像實(shí)例)就是類的一個特殊表現(xiàn)形式。下面來看一個類的例子:package{publicclassMyClass{publicvarmyProperty:Number=100;publicfunctionmyMethod( ){trace("Iamhere");}}}先來說明一下這段代碼。在這里有些新的知識,關(guān)于AS2老手也如此:包的聲明。包(Package),作用就是把有關(guān)的類進(jìn)行分組。知道這一點(diǎn)就夠了,我們不再進(jìn)行深入的議論,本書的示例甚至不會用到包。Package這個重點(diǎn)字和一對大括號是必需有的,我們理解為默認(rèn)包,緊隨后來的就是類的定義。另一個變化是AS3.0中的類擁有了接見重點(diǎn)字。接見重點(diǎn)字是指:一個用來指定其余代碼是否可接見該代碼的重點(diǎn)字。public(公有類)重點(diǎn)字指該類可被外部任何類的代碼接見。本書中所有示例的類都是public的。在深入學(xué)習(xí)了AS3.0后,我們會發(fā)現(xiàn)不是所有類都是公有的,甚至還有多重的類,這些內(nèi)容高出了本書的討論范圍。本例中我們能夠看到,這個類的名字為MyClass,后邊跟一對大括號。在這個類中有兩種要素,一個是名為myProperty的變量,另一個是名為myMethod的函數(shù)。包(Package)在AS2中,使用整個包名來創(chuàng)立一個類,比如:classcom.friendsofed.makingthingsmove.Utils{}在AS3中,包名寫在包的聲名處,類名寫類的聲名處,比如:packagecom.friendsofed.makingthingsmove{publicclassUtils{}}導(dǎo)入(Import)想象一下,每次要使用這個類的方法時都要輸入com.friendsofed.makingthingsmove.Utils,是不是太過煩雜太過死板了。別擔(dān)心,import語句能夠解決這個問題。在這個例子中,能夠把下面這句放在package中類定義的上面:importcom.friendsofed.makingthingsmove.Utils;。結(jié)構(gòu)函數(shù)(Constructor)結(jié)構(gòu)函數(shù)是指一個名字與類名相同的方法。當(dāng)該類被實(shí)例化時,該函數(shù)會被自動調(diào)用,也能夠傳入?yún)?shù),比如:首先,創(chuàng)立一個類:package{publicclassMyClass{publicfunctionMyClass(arg:String){trace("constructed");trace("youpassed"+arg);}}}然后,假定工作在FlashCS3IDE(集成開發(fā)環(huán)境)中,在時間軸上創(chuàng)立該實(shí)例:varmyInstance:MyClass=newMyClass("hello");結(jié)果輸出:constructedyoupassedhello繼承(Inheritance)一個類能夠從另一個類中繼承(inherit)和擴(kuò)展(extend)而來。這就意味著它獲得了另一個類所有的屬性和方法(除了那些被private掩遮住的屬性)。所生成的子類(派生類)還能夠增加更多的屬性和方法,或更改父類(基類)已有的屬性或方法。要分別創(chuàng)立兩個類來實(shí)現(xiàn)(兩個獨(dú)立的.as文件),比如:package{publicclassMyBaseClass{publicfunctionsayHello( ):void{trace("HellofromMyBaseClass");}}}package{publicclassMySubClassextendsMyBaseClass{publicfunctionsayGoodbye( ):void{trace("GoodbyefromMySubClass");}}}不要忘記,每個類都必須在其自己的文件中,文件名為該類的類名,擴(kuò)展名.as,所以必須要有MyBaseClass.as文件和MySubClass.as文件。因此,在使用FlashCS3IDE時,保留的FLA文件,要與這兩個類在同一個文件夾。下面代碼會生產(chǎn)兩個實(shí)例,把它寫入時間軸看看會發(fā)生什么:varbase:MyBaseClass=newMyBaseClass( );base.sayHello( );varsub:MySubClass=newMySubClass( );sub.sayHello( );sub.sayGoodbye( );第一個實(shí)例沒什么可說的,值得注意的是第二個實(shí)例中的sayHello方法,雖然在MySubClass中沒有定義sayHello,但它卻是繼承自MyBaseClass類的。另一個值得注意的是,增加了一個新的方法sayGoodbye,這是父類所沒有的。下面說說,在子類中怎樣改變一個父類中已存在的方法。在AS2中,我們能夠只需要從頭定義這個方法就能夠了。而在AS3中,則必需明確地寫出override重點(diǎn)字,來進(jìn)行從頭定義。package{publicclassMySubClassextendsMyBaseClass{overridepublicfunctionsayHello( ):void{trace("HolafromMySubClass");}publicfunctionsayGoodbye( ):void{trace("GoodbyefromMySubClass");}}}請注意,原來的sayHello方法被重寫,再調(diào)用MySubClass后,就有了新的信息。此外,私有成員也不能被重寫,因?yàn)樗鼈冎荒鼙凰鼈冏约旱念惤右?。MovieClip/Sprite子類我們能夠自己寫一個類,然后讓另一個類去繼承它。在AS3中,所有代碼都不是寫在時間軸上的,那么它們一開始都要繼承自MovieClip或Sprite。MovieClip類是電影剪輯對象屬性和方法的ActionScript.模板。它包括我們所熟悉的屬性如:電影的x,y坐標(biāo),縮放等,這些在AS3中的變化不大。AS3還增加了Sprite類,往常把它理解為不在時間軸上的電影剪輯。好多情況下,只使用代碼操作對象,并不波實(shí)時間軸和幀,這時就應(yīng)當(dāng)使用Sprite這個輕型的類。如果一個類繼承自MovieClip或Sprite,那么它會自動擁有該類所有的屬性和方法,我們還能夠?yàn)檫@個類增加特殊的屬性和方法。比如,游戲設(shè)計(jì)一個太空船的對象,我們希望它擁有一個圖形,并且在屏幕的某個地點(diǎn)移動,旋轉(zhuǎn),并為動畫增添enterFrame.偵聽器,還有鼠標(biāo)、鍵盤的偵聽等。這些都能夠由MovieClip或Sprite來達(dá)成,所以就要繼承自它們。同時,還能夠增加一些屬性如:速度(speed)、油量(fuel)、破壞度(damage),還有像騰飛(takeOff)、墜落(crash)、射擊(shoot)或是自毀(selfDestruct)等方法。那么這個類大體是這樣的:package{importflash.display.Sprite;publicclassSpaceShipextendsSprite{privatevarspeed:Number=0;privatevardamage:Number=0;privatevarfuel:Number=1000;publicfunctiontakeOff( ):void{//...}publicfunctioncrash( ):void{//...}publicfunctionshoot( ):void{//...}publicfunctionselfDestruct( ):void{//...}}}注意,首先要導(dǎo)入flash.display包中的Sprite類,如果要導(dǎo)入MovieClip類,同樣也需要導(dǎo)入這個相同的包類。創(chuàng)立文檔類(Documentclass)現(xiàn)在我們對類已經(jīng)了一定的認(rèn)識,接下來,看看如果真實(shí)地使用它。有時候我常說鑒于AS3的SWF是多么的重要,這是因?yàn)锳S3引入了一個全新的觀點(diǎn),文檔類(documentclass)。一個文檔類就是一個繼承自Sprite或MovieClip的類,并作為SWF的主類。讀取SWF時,這個文檔類的結(jié)構(gòu)函數(shù)會被自動調(diào)用。它就成為了我們程序的入口,任何想要做的事都能夠?qū)懺谏厦?,如:?chuàng)立電影剪輯,繪圖,讀取資源等等。如果在FlashCS3IDE中寫代碼,可使用文檔類,也能夠選擇持續(xù)在時間軸上寫代碼。但如果使用FlexBuilder2或免費(fèi)FlexSDK,那邊沒有時間軸,唯一的辦法就是寫在類中。這些工作一切都圍繞著強(qiáng)大的文檔類而展開,沒有它就沒有SWF。以下是一個文檔類的框架:package{importflash.display.Sprite;publicclassTestextendsSprite{publicfunctionTest( ){init( );}privatefunctioninit( ):void{//寫代碼處}}}如果你看過前面的部分,不會認(rèn)為這是個新知識,只可是是把他們放在了一同而已。使用默認(rèn)包,導(dǎo)入并繼承Sprite類。結(jié)構(gòu)函數(shù)只有一句,調(diào)用init方法。自然,也能夠把所有代碼寫在結(jié)構(gòu)函數(shù)里,可是要養(yǎng)成一個好習(xí)慣,就是盡量減少結(jié)構(gòu)函數(shù)中的代碼,所以把代碼寫到了另一個方法中。本書會給大家好多代碼塊進(jìn)行測試,那時要像上面這個例子同樣把代碼塊放入init方法中,這樣在電影編譯履行時,就會調(diào)用init中的代碼。下面我們要開始學(xué)習(xí)怎樣連結(jié)文檔類和SWF。使用FlashCS3IDE(集成開發(fā)環(huán)境)FlashCS3IDE是實(shí)現(xiàn)文檔類的最方便的工具。把上述的類選擇一個文件夾進(jìn)行保留,文件名為Test.as。翻開FlashCS3,創(chuàng)立一個FLA文件,保留到一這個類相同的目錄下。確認(rèn)FLA默認(rèn)發(fā)布設(shè)置為FlashPlayer9及AS3.0。在屬性面板中,我們注意到出現(xiàn)了一個名為文檔類(DocumentClass)的地區(qū)(圖2-1)。只需輸入類名:Test。圖2-1設(shè)置文檔類請注意,我們輸入的是類名,而不是文件名。所以這里不需要輸入擴(kuò)展名.as。如果這個類海涵在一個包中,那么就需要輸入類的完整路徑——比如:。程序動畫下面,再來學(xué)習(xí)一些AS3編程的基來源理。如果你已經(jīng)選擇好了一個開發(fā)環(huán)境,那么就出發(fā)吧。讓我們進(jìn)入ActionScript動畫世界。動畫的履行過程幾乎所有的程序動畫都包括幾種不同的履行過程。關(guān)于逐幀動畫來說,意味著創(chuàng)立和存儲一組連續(xù)的位圖,每一幀都是一幅圖像,只需要進(jìn)行顯示即可,見圖2-3。圖2-3逐幀動畫當(dāng)我們在Flash中使用圖形或元件時,事情就發(fā)了微妙的變化。這時,F(xiàn)lash不會為每一幀創(chuàng)立和存儲新的位圖。關(guān)于每一幀而言,F(xiàn)lash存儲的是舞臺上每個對象的地點(diǎn),大小,顏色等等。比方,一個小球在屏幕上移動,每一幀只存儲小球的在該幀上的地點(diǎn),第1幀小球的地點(diǎn)在左邊第10個像素,第2幀或許就在第15個像素,等等。Flash播放器(FlashPlayer)讀取這些信息,再根據(jù)這些信息的描繪來襯著舞臺并顯示該幀。根據(jù)這些變化擴(kuò)展一下流程圖,見圖2-4。圖2-4襯著并顯示幀我是這樣描繪一個動向程序動畫的,見圖2-5。圖2-5腳本動畫如圖2-5所示,沒有第1幀、第2幀的觀點(diǎn),腳本動畫往常只由一幀達(dá)成。下面我們就來看看動畫的履行過程。首先,成立初始化。舞臺中放入一個電影剪輯,再創(chuàng)立補(bǔ)間動畫,或使用代碼來描繪整個場景??傊詈蠖家獙υ搸M(jìn)行襯著及顯示。然后,應(yīng)用自定義規(guī)則。規(guī)則能夠像“讓球向右移動5像素”這樣簡單,也能夠是由幾十條復(fù)雜的三角函數(shù)組成。使用自定義規(guī)則會產(chǎn)生新的描繪再根據(jù)這些描繪進(jìn)行襯著及顯示,并不斷地應(yīng)用這個規(guī)則。請注意,同一規(guī)則被一遍又一遍地履行,而不是對第1幀用一套規(guī)則,而對第2幀又使用另一套規(guī)則,聽起來很復(fù)雜,其實(shí)不然,這里所說的“規(guī)則”,實(shí)際上就是ActionScript.代碼。每套規(guī)則都可由一行或多行代碼組成。下面是小球向右移動5像素的例子:ball.x=ball.x+5;這句話是說不論小球X坐標(biāo)(水平軸)在哪里,都在原來的X地點(diǎn)上增加5像素,并把該坐標(biāo)作為它的新X坐標(biāo)。也可簡化為:ball.x+=5;“+=”操作符:把右邊的值與左邊的變量相加,相加的結(jié)果再賦值給該變量。以下是更多的高級規(guī)則,日后會學(xué)到:vardx:Number=mouseX-ball.x;vardy:Number=mouseY-ball.y;varax:Number=dx*spring;varay:Number=dy*spring;vx+=ax;vy+=ay;vy+=gravity;vx*=friction;vy*=friction;ball.x+=vx;ball.y+=vy;graphics.clear( );graphics.lineStyle(1);graphics.moveTo(ball.x,ball.y);graphics.lineTo(mouseX,mouseY);這段現(xiàn)在看不懂沒關(guān)系,大家只需知道Flash會在每一幀中生成這段代碼,并不斷地履行。怎樣讓它循環(huán)履行?看看我第一次的嘗試,這也是好多AS初學(xué)者都會犯的錯誤。這是在好多程序設(shè)計(jì)語言中都存在的循環(huán)結(jié)構(gòu),如for和while。用循環(huán)結(jié)構(gòu)使代碼重復(fù)履行,這就是我曾寫的那段:for(i=0;i<500;i++){ball.x=i;}看起來相當(dāng)簡單。變量i從0開始,所以小球X坐標(biāo)移動到0——舞臺最左邊。i++讓i的值每次增長1,即:0~1~2~3~4,每次這個值都會做為ball.x的值,把小球從左向右移動。當(dāng)值為500時,表達(dá)式i<500值為假(false),循環(huán)結(jié)束。如果你也犯過同樣的錯誤,就會知道,小球沒有在舞臺上發(fā)生移動——只是一下子出現(xiàn)在了舞臺的右邊而已。為什么沒有移動到中間的那些點(diǎn)上?其實(shí)它移動了,只是我們沒有看到,因?yàn)槲覀儧]有讓Flash去刷新屏幕。圖2-6為另一個流程圖,看看實(shí)際都發(fā)生了什么。圖2-6為什么循環(huán)結(jié)構(gòu)無法產(chǎn)生動畫實(shí)際上我們使用自定義規(guī)則使球移動到指定地點(diǎn),并創(chuàng)立了500次新的場景。但在循環(huán)結(jié)束從前沒有給出顯示,這是因?yàn)镕lash只在每一幀結(jié)束后才進(jìn)行一次刷新,這點(diǎn)很重要。以下是Flash進(jìn)入幀的動作次序:在舞臺上放置所有的對象,不論在何級,何層,或是否為加載的電影。履行幀上所有的Action腳本(ActionScript),不論在何級,何層,不論處于電影剪輯仍是按鈕中,也不論它嵌套在哪處。判斷是否到了該顯示的時候。如果設(shè)置幀頻為20幀/秒,F(xiàn)lash最少要等上一幀顯示后50毫秒后再進(jìn)行下一次顯示,顯示了該幀后,就要編譯和進(jìn)入下一幀。如果幀頻沒有到20幀/秒,那么要等待到正確的時間再去履行。準(zhǔn)時時間存在著一些問題。首先,盡人皆知幀頻是不精準(zhǔn)的(即便在Flash9中),不要依靠它作為精準(zhǔn)的準(zhǔn)時器。其次,在大量的編譯和AS履行花費(fèi)的時間會高出規(guī)定的時間。只管如此,我們也不必?fù)?dān)心自己的腳本會被砍掉一部分。在進(jìn)入第3步從前,F(xiàn)lash會達(dá)成所有可履行代碼(第2步),即便需要延緩幀頻也要達(dá)成。Flash為了能達(dá)成腳本,甚至?xí)壬?5秒。在上面的例子中,F(xiàn)lash等待循環(huán)結(jié)束,然后進(jìn)入下一幀,只在跳轉(zhuǎn)到下一幀時進(jìn)行屏幕的刷新。這就是為什么我們看到的是跳動而不是移動。因此,要想達(dá)成移動,我們所要做的就是打散這個循環(huán),請回過頭參照圖2-5。幀循環(huán)幀循環(huán)的理念,存在于Flash最早的版本中,那時ActionScript.還不像今天那么強(qiáng)大。把代碼寫入重點(diǎn)幀,并在下一幀中寫入像gotoAndPlay這樣的語句,使播放頭(playhead)回到前一幀。這樣兩幀之間就形成了一個無限循環(huán),每當(dāng)播放頭到了代碼幀上時,就會履行那些代碼。比如,在舞臺上有一個實(shí)例名為ball的電影剪輯。第一幀的代碼就像這樣:ball.x++;第二幀的代碼如下:gotoAndPlay(1);實(shí)際上第二幀不需要做任何事,只是讓時間軸自動回到第一幀而以。另一個版本是成立三個幀,第一幀進(jìn)行初始化,寫入只履行一次的代碼,不進(jìn)行循環(huán)。第二幀才是主要的履行代碼,第三幀只寫gotoAndPlay(2);這個方法在早期Flash版本中常被使用,雖然有點(diǎn)過時,可是同樣能夠優(yōu)秀地達(dá)成任務(wù)。馬上我們還要學(xué)到更靈活更強(qiáng)大的設(shè)置方法,但此后你會發(fā)現(xiàn)其實(shí)原理上是同樣的。電影事件電影事件在AS3中徹底的消失了,這真是件好事。但還要捎帶提一下,回首Flash5的時代,只有幀循環(huán)和電影剪輯事件兩種選擇。電影事件指代碼直接寫在電影剪輯上,而不是幀上。怎樣實(shí)現(xiàn)電影事件,首先選擇舞臺上的電影剪輯,然后翻開動作面板并將代碼寫在上面,這些代碼只對該電影剪輯有效。所有代碼必需寫在事件塊中,比方:onClipEvent(eventName){//codegoeshere}關(guān)于onClipEvent(eventName),作用于eventName(某種事件)。關(guān)于"on"種類事件則必需指定鼠標(biāo)或鍵盤事件,如按下(press)和釋放(release)。事件名稱(eventName)是指很多Flash電影事件之一,所謂事件就是在電影中發(fā)生的事。事件分為兩種:系統(tǒng)事件和用戶事件。系統(tǒng)事件指發(fā)生在如計(jì)算機(jī),F(xiàn)lash,或電影上的事件,比方調(diào)取數(shù)據(jù),調(diào)取信息,或播放幀等。用戶事件是指用戶所做的一些事,基本上就是鼠標(biāo)和鍵盤兩種。電影事件使用得最多的就是load和enterFrame.這兩個。Load事件會在電影第一次出現(xiàn)在舞臺上時才履行,且只履行一次。所以說特別適合在這里面寫入初始化代碼。只需把代碼寫在大括號間即可:onClipEvent(load){//initializationcode}我們能夠把帶有如下代碼的電影剪輯放入時間軸上(注意:此處為AS1寫法):onClipEvent(load){this._x=100;this._y=100;}onClipEvent(enterFrame){this._x+=5;}本書示例中的代碼不使用這種寫法(因?yàn)樗呀?jīng)不是一種語言了),但不論使用何種方法,初始化(initialization),重復(fù)動作(repeatingactions)和屏幕刷新(screenrefresh)都是特別重要的。事件及事件辦理FlashMX的ActionScrpt發(fā)生了重要的改變,這些轉(zhuǎn)變與改革為Flash成為真實(shí)的富客戶端程序(RIA)確立了基礎(chǔ)。其中一個就是全新的事件結(jié)構(gòu),在編寫特別復(fù)雜的行為時比從前的版本好用好多。FlashMX從前的版本,只能把代碼放在電影和按鈕的onClipEvent(eventName)或on(eventName)這兩種事件辦理方法中。這就意味著,在設(shè)計(jì)的時候就要把電影剪輯放到舞臺上,并把代碼寫入電影剪輯中。MX的事件結(jié)構(gòu)并不完美,但與從前版本來說已經(jīng)有了長足的進(jìn)步,并允許我們在任何時候接見任何事件,或是停止辦理任何事件,或是動向改變某個事件的行為,能夠想象這有多么的強(qiáng)大和靈活。要想認(rèn)識事件,就要理解下面幾條觀點(diǎn):偵聽器(listener)與辦理函數(shù)(handler),這兩個名字很貼切,偵聽器就是偵聽事件的對象,辦理函數(shù)是一個用于辦理所要發(fā)生的事件的函數(shù)。偵聽與辦理在ActionScript.的發(fā)展過程中進(jìn)行過好多次演變,在AS2中就有好多不同的實(shí)現(xiàn)方法。為了防止雜亂,我很推崇AS3,因?yàn)樗喕诉@個過程,使事件辦理變得更方便更一致。事件偵聽器與辦理函數(shù)前面說過,偵聽器是一個用于偵聽事件的對象。我們能夠設(shè)計(jì)一個類,經(jīng)過調(diào)用addEventListener函數(shù)為某事件指定一個偵聽器。輸入要偵聽的事件名稱以及要履行辦理的函數(shù)名稱??匆粋€例子:addEventListener("enterFrame",onEnterFrame);在加入事件偵聽器時,可使用可選參數(shù),本書中不會用到;關(guān)于大部分的應(yīng)用程序來說,會使用以上這種寫法就夠用了。請注意事件名"enterFrame"為字符串型,戲稱它為“魔力字符串”(MagicString)。為什么這么叫?如果你誤輸入成了"entorFrame",只管沒有這個事件名稱,編譯器也會編譯履行它,會發(fā)現(xiàn)事件辦理函數(shù)沒有履行。但AS3仍會對其進(jìn)行辦理,除了使用“魔力字符串”以外,還能夠使用事件類(EventClass)的屬性。比如:addEventListener(Event.ENTER_FRAME,onEnterFrame);實(shí)際上Event.ENTER_FRAME的.值就是”enterFrame”這個字符串。那么這個屬性也可能輸錯就像Event.ENTOR_FRAME,.但這種方法幸虧,如果輸入錯誤了,程序會拒絕編譯,并提示你在事件類中不存在該屬性。編譯器會提示發(fā)生錯誤的行及切實(shí)的字符。所以,最好使用這種方法,除非編譯器會幫我們修正錯誤或編寫代碼。除此之外,還有其余的事件種類如:MouseEvent.MOUSE_DOWN,KeyboardEvent.KEY_DOWN,TimerEvent.TIMER等。這些都由"mouseDown","keyDown","timer"這樣的簡單字符串來表示,如果你記不住這些字符串,那么最好就去使用事件類的屬性。另一個重點(diǎn)是,使用addEventListener函數(shù)直接調(diào)用類中的函數(shù)。有時,需要偵聽另一個對象產(chǎn)生的事件,比如,有一個名為mySpriteButton的Sprite電影(Sprite):電影或按鈕,能達(dá)成按鈕的動作。當(dāng)用戶點(diǎn)擊它的時候就會產(chǎn)生mouseDown(鼠標(biāo)按下)事件。偵聽該Sprite電影的mouseDown事件,就要調(diào)用該對象的addEventListener方法,如下:mySpriteButton.addEventListener(MouseEvent.MOUSE_DOWN,onSpritePress);最后一點(diǎn),必需要有事件辦理函數(shù)如onEnterFrame,在AS3中,能夠隨意地為事件辦理函數(shù)命名,這點(diǎn)與從前的ActionScript不同。在enterFrame.示例中,使用onEnterFrame.做事件辦理函數(shù),是因?yàn)槲覀兞?xí)慣使用這個名稱。在AS3中,onEnterFrame.已不再是重點(diǎn)字,自然也能夠?yàn)檫@個辦理函數(shù)命名為move,run,或是doSomethingCool。但是,我們已經(jīng)習(xí)慣使用”on”表示事件開始,后邊跟一些描繪詞如onStartButtonClick,onConfigXMLLoad或onRoketCrash。有些朋友喜歡在事件名后邊加上"Handler"作為后綴,如:enterFrameHandler,這只是個人偏好問題。偵聽器用于偵聽事件,但關(guān)于一個偵聽器來說,或許會同時偵聽好多事件。在系統(tǒng)內(nèi)部,一個事件對象擁有一個包括了所有對象及自己的偵聽器的列表。如果一個對象能夠產(chǎn)生多種不同種類的事件,如mouseDown,mouseUp,mouseMove等,那么它就擁有一個偵聽器列表,其中包括它所波及的所有種類的事件。不論觸發(fā)何種事件,都會檢索一遍列表,然后使列表中的每個對象都知道所發(fā)生的事件。另一種對事件的描繪是,將其看作一個加入到事件隊(duì)列的偵聽器成員。產(chǎn)惹禍件的對象將它所產(chǎn)生的事件宣布給所有成員,當(dāng)你不再需要這個對象進(jìn)行偵聽時,能夠令其停止偵聽或使用removeEventListener方法排除該成員;就是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論