首先聲明:本人大菜鳥一個(gè),剛接觸AS3不久,許多理念還沒來(lái)得及灌輸,這些case都是從網(wǎng)上down的,但因?yàn)榻庹f(shuō)是英文的,不利我們學(xué)習(xí),我就充當(dāng)一個(gè)translater,順便可以讓自己鞏固一下知識(shí)。
水平有限,錯(cuò)誤難免,歡迎大蝦小蝦,大鳥小鳥指正。
下面進(jìn)入正題:
案例1:熟悉新的事件機(jī)制和addChild的運(yùn)用
說(shuō)明:拖動(dòng)小人到滑板上,然后拖動(dòng)滑板,可以發(fā)現(xiàn)小人已經(jīng)跟滑板粘在了一起。 演示:http://www.live-my-life-with-yuyi.com/as3_cases/changing_parents/
代碼:
boarder_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag); boarder_mc.addEventListener(MouseEvent.MOUSE_UP, drop); red_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag); red_mc.addEventListener(MouseEvent.MOUSE_UP, drop); blue_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag); blue_mc.addEventListener(MouseEvent.MOUSE_UP, drop);
AS3采用了新的監(jiān)聽機(jī)制,而且注意到對(duì)每個(gè)mc的鼠標(biāo)按下彈起都使用了相同的函數(shù),這就需要在函數(shù)里判斷事件的發(fā)生者,從而做出相應(yīng)的處理。
function drag(event:MouseEvent):void { if(event.target.name == "boarder_mc") { addChild(boarder_mc); event.target.startDrag(true); boarder_mc.x = mouseX; boarder_mc.y = mouseY; } else { event.target.startDrag(); } }
通過(guò)event.target.name來(lái)取得事件發(fā)生的對(duì)象名,AS3里沒有了root,addChild相當(dāng)于把某個(gè)mc搬到了舞臺(tái)上,其實(shí)是TimeLine0.addChild(mc),同時(shí)保證該mc是在舞臺(tái)的最頂層(AS3里沒有了深度管理)。 通過(guò)event.target來(lái)獲取事件發(fā)生的對(duì)象
接著來(lái)看drop函數(shù)
function drop(event:MouseEvent):void { event.target.stopDrag(); if(boarder_mc.hitTestObject(red_mc)) { red_mc.addChild(boarder_mc); boarder_mc.x = 0; boarder_mc.y = 0; } else if(boarder_mc.hitTestObject(blue_mc)) { blue_mc.addChild(boarder_mc); boarder_mc.x = 0; boarder_mc.y = 0; } }
當(dāng)鼠標(biāo)彈起時(shí),啥也不管,先停止拖動(dòng),如果小人和滑板有重合區(qū)域,則將小人放到滑板里,滑板就像一個(gè)container,boarder_mc成了red_mc的child,將boarder_mc的x坐標(biāo)和y坐標(biāo)清零是為了將小人放到滑板的正確位置。
如果小人已經(jīng)成為了滑板的child,那么再次拖動(dòng)滑板時(shí),由于又執(zhí)行了一次addChild(boarder_mc);所以滑板的父類又變成了舞臺(tái)。
整個(gè)案例1的分析到此結(jié)束,涉及的知識(shí)點(diǎn)不多,主要是熟悉一下AS3的語(yǔ)法。
源文件下載
經(jīng)典論壇討論: http://bbs.blueidea.com/thread-2807809-1-1.html
本文鏈接:http://m.95time.cn/tech/multimedia/2007/5072.asp
出處:藍(lán)色理想
責(zé)任編輯:moby
◎進(jìn)入論壇RIA設(shè)計(jì)與應(yīng)用版塊參加討論
|