Clickable shapes(可點(diǎn)擊的形體)
下面我們先開(kāi)始創(chuàng)建一個(gè)可以點(diǎn)擊的形體。
1. 選擇文件>新建一個(gè)文檔,并將它保存為simpleBall.fla. 2. 選擇繪制圓工具,在場(chǎng)景中繪制一個(gè)正圓。當(dāng)然在繪制的時(shí)候按住shift就可以了。 注意:在繪制時(shí)候確何你的Object Drawing mode(對(duì)象繪模式)是關(guān)閉的。 3.選中選擇工具并雙擊這個(gè)形體使它高亮顯示 4. 當(dāng)這個(gè)形體選中后,選擇編輯modify>Convert to Symbol轉(zhuǎn)換為元件(按F8)來(lái)打開(kāi)元件轉(zhuǎn)換窗口, 5.將名稱改為circle然后點(diǎn)擊ok,將它轉(zhuǎn)換為影片剪輯。 6. 元件要仍處于選中的狀態(tài),在屬性面板上為它起一個(gè)實(shí)例名為:ball_mc 7. 取消對(duì)元件的選擇打開(kāi)action面板(F9). 8.在Action面板上輸入如下代碼:
代碼:
ball_mc.addEventListener(MouseEvent.CLICK, clickHandler); function clickHandler(event:MouseEvent):void { trace("You clicked the ball"); }
在這段代碼中,ball_mc實(shí)例變成了可以點(diǎn)擊的了,因?yàn)槟慵尤肓耸录䝼陕?tīng)用來(lái)檢測(cè)用戶是否有點(diǎn)擊動(dòng)作,無(wú)論何時(shí)只要用戶點(diǎn)擊了ball_mc影片剪輯,clickHandler()函數(shù)就會(huì)執(zhí)行。這非常類(lèi)似于之前版本在組件中加入偵聽(tīng)事件,如As2.0使用onPress()事件來(lái)檢測(cè)用戶是否點(diǎn)擊了剪輯或按鈕。 9.選擇Control>Test Movie 測(cè)試影片,當(dāng)你點(diǎn)擊圓時(shí),就會(huì)在面板上輸出”you clicked the ball. 10.關(guān)閉Swf文件返回Flash操作環(huán)境,編輯你的Actionscript 代碼,在原有代碼的上面加入如下一行代碼: ball_mc.buttonMode = true; 11.重新測(cè)試你的影片,當(dāng)你的光標(biāo)位于圓之上時(shí),光標(biāo)就會(huì)變成一只小手的形狀。用于給用戶一個(gè)提示,這是可以點(diǎn)擊的。
Draggable shapes(可拖動(dòng)的形體)
如果你想讓用戶可以在場(chǎng)影中拖動(dòng)這個(gè)形體,你需要加入兩個(gè)事性偵聽(tīng)器,mouseDown(MouseEvent.MOUSE_DOWN)和mouseUp(MouseEvent.MOUSE_UP),如下面的例子。
下面的例子示范如何為mouseDown和mouseUp事件加入事件偵聽(tīng)器
1.編輯我們之前的例子中代碼如下:
代碼:
ball_mc.buttonMode = true; ball_mc.addEventListener(MouseEvent.CLICK, clickHandler); ball_mc.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener); ball_mc.addEventListener(MouseEvent.MOUSE_UP, mouseUpListener); function clickHandler(event:MouseEvent):void { trace("You clicked the ball"); } function mouseDownListener(event:MouseEvent):void { ball_mc.startDrag(); } function mouseUpListener(event:MouseEvent):void { ball_mc.stopDrag(); }
2.測(cè)試你的影片。你就可拖動(dòng)這個(gè)圓了。 雖然我們編寫(xiě)這個(gè)例子沒(méi)有花費(fèi)我們多少時(shí)間,但如果再讓你寫(xiě)一個(gè)可拖動(dòng)的形體,你可能不會(huì)情愿去寫(xiě),假想你能將你的代碼轉(zhuǎn)換為與元件連接的外部類(lèi)文件,它可以自動(dòng)的創(chuàng)建可拖動(dòng)的形體,會(huì)在將來(lái)結(jié)省你的大量時(shí)間。下面我們就看如何實(shí)現(xiàn)。
Converting code into a class(將你的代碼轉(zhuǎn)換成類(lèi))
下面的例子創(chuàng)建一個(gè)Actionscript類(lèi)它封裝整個(gè)影片剪輯的拖動(dòng)的實(shí)現(xiàn)邏輯,F(xiàn)在不管什么時(shí)候,只要?jiǎng)?chuàng)建一個(gè)類(lèi)的新的實(shí)例被創(chuàng)建,它就是可拖動(dòng)的。無(wú)須為場(chǎng)景中的每個(gè)實(shí)例去寫(xiě)代碼。
1.創(chuàng)建一個(gè)新的Fla文檔并將它保存為fancyBall.fla. 2.選擇File>New選擇Actionscript File創(chuàng)建一個(gè)新的Actionscript文件。 3.保存這個(gè)Actionscript文件為Ball.as與Fla文件為同一路徑下。也就是剛才創(chuàng)建的fancyBall.fla. 4. 在里面輸入如下代碼:
代碼:
package { import flash.display.MovieClip; import flash.events.MouseEvent; public class Ball extends MovieClip { public function Ball() { trace("ball created: " + this.name); this.buttonMode = true; this.addEventListener(MouseEvent.CLICK, clickHandler); this.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener); this.addEventListener(MouseEvent.MOUSE_UP, mouseUpListener); } private function clickHandler(event:MouseEvent):void { trace("You clicked the ball"); } function mouseDownListener(event:MouseEvent):void { this.startDrag(); } function mouseUpListener(event:MouseEvent):void { this.stopDrag(); } } }
上面的代碼定義了一個(gè)新類(lèi)名為Ball,它繼承了MovieClip類(lèi)(內(nèi)置在flash.display package中).注意在使用As3.0書(shū)寫(xiě)外部類(lèi)時(shí),你必須明確的導(dǎo)入所需要類(lèi)。不同于在Fla內(nèi)部書(shū)寫(xiě)代碼。 5.保存并關(guān)閉Ball.as文檔,然后打開(kāi)fancyBall.fla文檔。 6. 使用繪制圓工具,在場(chǎng)景中繪制一個(gè)圓并將轉(zhuǎn)換為movieClip. 7.右擊剛剛建立的圓,選擇鏈接。 8.選擇Export for ActionScript(為action導(dǎo)出),在Class(類(lèi))的輸入框中輸入類(lèi)名Ball 9.點(diǎn)擊ok.關(guān)閉此面板。 10.確何這個(gè)圓的實(shí)例在場(chǎng)景中,測(cè)試影片。觀看是否與之前的效果是一樣的。 它看起來(lái)很不錯(cuò),下面的例子我們來(lái)看如何動(dòng)態(tài)的創(chuàng)建類(lèi)實(shí)例。
Dynamically creating instances of a class(動(dòng)態(tài)創(chuàng)建類(lèi)實(shí)例)
你不需要在創(chuàng)作時(shí)總是將元件拖動(dòng)到場(chǎng)景中,你也可以通過(guò)使用Actionscirpt新操作方法在庫(kù)中創(chuàng)建新的類(lèi)實(shí)例。
Using the new operator(使用新的操作)
之前的Actionscript在創(chuàng)建新的MovieClip或是TextField實(shí)例時(shí)是通過(guò)使用如MovieClip.attachMovie(),MovieClip.createEmptyMovieClip(),或MovieClip.createTextField().來(lái)創(chuàng)建的。在ActionScript 3.0中,你可以通過(guò)類(lèi)似如new Ball()的方法創(chuàng)建新的MovieClip,TextField,Sprite,和Video 實(shí)例—或是你自定義的類(lèi),如下方法: 1.打開(kāi)fancyBall.fla.將場(chǎng)景中的所有實(shí)例元件刪去,在主時(shí)間線上加入如下代碼:
代碼:
var b1:Ball = new Ball();
2.按下ctrl +回車(chē)測(cè)試,注意,我們會(huì)發(fā)現(xiàn)沒(méi)有任何東西出現(xiàn)在場(chǎng)景中,但是在輸出面板上會(huì)顯示:“ball created: instance1”,盡管Flash創(chuàng)建了ball的一個(gè)新的實(shí)例,但它是不可視的,因?yàn)槟銢](méi)有使用addChild()將它加入到顯示列表中。 3.編輯代碼,將b1實(shí)例加入到顯示列表中。測(cè)試。
代碼:
addChild(b1);
下一部你需要使用document class,它將允許你將代碼從主時(shí)間軸的第一幀上移到一個(gè)外部文檔中,它類(lèi)似與之前例子中的通過(guò)元件與類(lèi)連接.
Using the Document Class text box(使用Document class輸入框)
下面示范如何將你的代碼從主時(shí)間軸移到一個(gè)外部的As文件中。
1.刪去fancyBall.fla第一幀上的代碼。 2.創(chuàng)建一個(gè)新的Actionscript文檔保存為BallDocumentClass.as,與fancyBall.fla處于同一目錄下。 3.加入如下代碼在BallDocumentClass.as中:
代碼:
package { import flash.display.MovieClip; public class BallDocumentClass extends MovieClip { private var tempBall:Ball; private var MAX_BALLS:uint = 10; public function BallDocumentClass() { var i:uint; for (i = 0; i < MAX_BALLS; i++) { tempBall = new Ball (); tempBall.scaleX = Math.random(); tempBall.scaleY = tempBall.scaleX; tempBall.x = Math.round(Math.random() * (this.stage.stageWidth - tempBall.width)); tempBall.y = Math.round(Math.random() * (this.stage.stageHeight - tempBall.height)); addChild(tempBall); } } } }
4.保存并關(guān)閉這個(gè)as文檔,打開(kāi)fancyBall.fla. 5.在屬性面板的document class后面的輸入框中輸入BallDocumentClass,保存文件。 6.測(cè)試,你會(huì)發(fā)現(xiàn)有10個(gè)大小位置不同的元件出現(xiàn)在場(chǎng)景中。 使用Document Class允許你將代碼放置在外部文件中,而不是時(shí)間線上,可以在許許的fla文件重用代碼,并且在團(tuán)隊(duì)協(xié)作版本控制系統(tǒng)(CVS)中,更容易共享代碼。
總結(jié):
這篇文章只是對(duì)As3.0的一個(gè)簡(jiǎn)單應(yīng)用介紹,只要告訴大家如何創(chuàng)建簡(jiǎn)單的類(lèi),如何使用改良的偵聽(tīng)事件模型,如何使用document class.
Ps by egoldy:學(xué)完這篇文章,你會(huì)發(fā)現(xiàn)自已也可以編寫(xiě)在fla中看不見(jiàn)一行代碼的程式了,真正的是界面與代碼分離,控制,看上去真的是很酷,如果你也在學(xué)習(xí)As3.0,別忘了把你的心得分享一下。Cheers J.
源文件下載
出處:WebStudio
責(zé)任編輯:moby
上一頁(yè) 探索F9 As3.0 Preview [1] 下一頁(yè)
◎進(jìn)入論壇Flash專欄版塊參加討論
|