圖13-5 手型
(6)下面先編寫已經(jīng)創(chuàng)建的元件擴(kuò)展類“FLY” ,該類接收一個Number類型參數(shù),將其賦值作為該類產(chǎn)生對象的y軸方向上的遞減值,如第16行代碼所示,通過在構(gòu)造函數(shù)中為其注冊ENTER_FRAME事件偵聽,使該類對象在被創(chuàng)建時便執(zhí)行事件偵聽器函數(shù)enterFrameHandler ,也就是所創(chuàng)建的每一只喜鵲都以某一速度(變量speed值)作向上運(yùn)動。此外,該類還提供兩個方法:removeTimerHandler()用于清除事件偵聽器函數(shù),這在該類對象被刪除時會被調(diào)用(刪除不必要的事件偵聽);另一個方法flySpeed()是取得_speed值。
AS3代碼
package { import flash.display.MovieClip; import flash.utils.Timer; import flash.events.*; public class Fly extends MovieClip { private var _speed:Number; public function Fly(speed) { _speed = Math.round(speed); this.addEventListener(Event.ENTER_FRAME,enterFrameHandler); } private function enterFrameHandler(event:Event):void{ this.y -= this._speed; } public function removeTimerHandler():void { this.removeEventListener(Event.ENTER_FRAME,enterFrameHandler); trace("清除實(shí)例事件"); } public function get flySpeed():Number{ return this._speed; } } } |
(7)下面是主程序類的編寫,我們在構(gòu)造函數(shù)初始化舞臺的寬度和高度,并創(chuàng)建存儲所有喜鵲對象的容器,如第22到25行代碼所示。在第27到31行代碼隱藏系統(tǒng)鼠標(biāo)并創(chuàng)建“手型”,通過偵聽stage對象的MOUSE_MOVE和MOUSE_DOWN事件來控制“手型”的鼠標(biāo)跟隨stageMoveHandler()和狀態(tài)stageDownHandler()。
AS3代碼
package { import flash.display.*; import flash.events.*; import flash.utils.Timer; import flash.text.TextField; import flash.ui.Mouse; public class Main extends Sprite { private var _grade:Number;//得分值 public var displayGrade_txt:TextField;//得分顯示 public var start_btn:SimpleButton;//開始按鈕 private var stageW:Number; private var stageH:Number; private var content_mc:Sprite;//存儲所有喜鵲對象的容器 private var hand_mc:MovieClip;//“手型”對象 private var _timer:Timer; public function Main() { this.stageW = stage.stageWidth; this.stageH = stage.stageHeight; this.content_mc = new Sprite(); addChild(content_mc); Mouse.hide(); this.hand_mc = new MouseHand(); hand_mc.mouseEnabled = false; hand_mc.gotgood_mc.mouseEnabled = false; addChild(hand_mc); stage.addEventListener(MouseEvent.MOUSE_MOVE, stageMoveHandler); stage.addEventListener(MouseEvent.MOUSE_DOWN, stageDownHandler); init(); } |
(8)stageMoveHandler()方法是簡單的鼠標(biāo)跟隨,stageDownHandler()方法是當(dāng)用戶鼠標(biāo)點(diǎn)擊時播放步驟(5)中的“手型”影片剪輯動畫,產(chǎn)生“抓”的動作效果。 init()方法中開始初始化該游戲,主要是將displayGrade_txt顯示文本的內(nèi)容設(shè)置為0和為開始按鈕注冊事件偵聽器函數(shù)。當(dāng)用戶單擊start_btn按鈕后,便調(diào)用startGame()方法,此時,將結(jié)束游戲按鈕out_btn 設(shè)置為可見,并注冊事件偵聽器函數(shù),如第59、60行代碼所示。然后通過創(chuàng)建Timer類對象實(shí)例進(jìn)行計時,每隔500毫秒執(zhí)行一次copy()偵聽器函數(shù),也就是創(chuàng)建一只喜鵲對象,如第62到64行代碼所示。第65行將start_btn按鈕設(shè)置為不可見。
提示:關(guān)于計時器Timer類:Timer(delay:Number, repeatCount:int = 0)
參數(shù) delay:Number — 計時器事件間的延遲(以毫秒為單位)。
repeatCount:int (default = 0) — 指定重復(fù)次數(shù)。 如果為 0,則計時器重復(fù)無限次數(shù)。 如果不為 0,則將運(yùn)行計時器,運(yùn)行次數(shù)為指定的次數(shù),然后停止。
AS3代碼
private function stageMoveHandler(e:MouseEvent):void { this.hand_mc.x = stage.mouseX; this.hand_mc.y = stage.mouseY; } private function stageDownHandler(event:MouseEvent):void { hand_mc.gotgood_mc.gotoAndPlay(2); } private function init():void{ _grade = 0; displayGrade_txt.text = "0"; start_btn.addEventListener(MouseEvent.CLICK,startGame); } private function startGame(event:MouseEvent):void { trace("開始游戲!"); out_btn.visible = true; out_btn.addEventListener(MouseEvent.CLICK,outGame); _timer =new Timer(500,0); _timer.addEventListener(TimerEvent.TIMER,copy); _timer.start(); start_btn.visible =false; } |