import flash.utils.Timer; import flash.events.TimerEvent; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; stop(); /* 自訂滑鼠游標 將預設預設滑鼠游標取代為特定元件實體。 */ stage.addChild(myMouse_mc); //新增滑鼠游標影片片段至場景中 myMouse_mc.mouseEnabled = false; //取消原本滑鼠的功能 myMouse_mc.addEventListener(Event.ENTER_FRAME, fl_CustomMouseCursor); function fl_CustomMouseCursor(event:Event) { myMouse_mc.x = stage.mouseX; myMouse_mc.y = stage.mouseY; } Mouse.hide(); //若要儲存預設滑鼠指標,請取消下列各行的註解: //myMouse_mc.removeEventListener(Event.ENTER_FRAME, fl_CustomMouseCursor); //stage.removeChild(myMouse_mc); //Mouse.show(); /* 倒數計時器 從特定秒數開始倒數。 指示: 1. 若要變更倒數時間長度,請將下方第一行中的數值 10 變更為您希望的秒數。 */ // 修改為倒數60秒 var fl_SecondsToCountDown:Number = 20; //每一秒執行一次計時器 var fl_CountDownTimerInstance:Timer = new Timer(1000, fl_SecondsToCountDown); fl_CountDownTimerInstance.addEventListener(TimerEvent.TIMER, fl_CountDownTimerHandler); fl_CountDownTimerInstance.start(); function fl_CountDownTimerHandler(event:TimerEvent):void { //把倒數計時器顯示在動態文字上 fl_SecondsToCountDown--; timer_txt.text = String(fl_SecondsToCountDown); } // 當倒數時間結束,停止計時,並跳到Game Over的影格 fl_CountDownTimerInstance.addEventListener(TimerEvent.TIMER_COMPLETE, endGame); function endGame(event:TimerEvent):void { gotoAndStop(2); bubbleTimer.stop(); //立即移除畫面已經產生的所有泡泡 removeChild(bubbleArea); } //隨機產生泡泡 var bubbleArea:Sprite = new Sprite(); //建立泡泡的Sprite實體 var bubbleTimer:Timer = new Timer(800, 0); bubbleTimer.addEventListener(TimerEvent.TIMER, makeBubble); function makeBubble(event:TimerEvent) { var bubble: MovieClip = new bubble_mc(); //產生x座標於 -50 (在螢幕外面) bubble.x = -50; //隨機產生y的座標,介於 20 - 380之間的高度 var yPos: int = 20 + Math.random()*360; bubble.y = yPos; //將泡泡放在舞台上 bubbleArea.addChild(bubble); //利用每個影格觸發泡泡移動 bubble.addEventListener(Event.ENTER_FRAME, onFramePlaying); } bubbleTimer.start(); //啟動泡泡計時器 function onFramePlaying(event:Event):void { if(event.target.x < 650) { // 每次移動10 pixel event.target.x = event.target.x + 10; //每次旋轉10度 event.target.rotation=event.target.rotation + 10; } else { // 當泡泡 x 座標超過 650,跑出螢幕外時,移除泡泡 // event.target指的是目前發生事件的目標物件,即 bubble // 因物件不能把自己移除,所以利用parent.removeChild指定移除上層的父容器物件,才能連帶移除泡泡實體 event.target.parent.removeChild(event.target); event.target.removeEventListener(Event.ENTER_FRAME, onFramePlaying); } } // 設定索引位置 // =============================================== setChildIndex(bath_mc, 0); //把浴室設在最下層 //把bubbleArea 放在浴室的上一層 addChildAt(bubbleArea, 1); // 設定發射子彈 stage.addEventListener(MouseEvent.MOUSE_DOWN, myshoot); function myshoot(event:MouseEvent): void { var temp:bullet_mc = new bullet_mc(); temp.x = mouseX; temp.y = mouseY; addChild(temp); temp.addEventListener(Event.ENTER_FRAME, bulletMove); } var score:int = 0; //讓字彈移動並漸漸縮小 function bulletMove(event:Event): void { if (event.target.scaleX > 0.3) { //一次縮小10% event.target.scaleX = event.target.scaleX - 0.1; event.target.scaleY = event.target.scaleY - 0.1; } else { event.target.parent.removeChild(event.target); event.target.removeEventListener(Event.ENTER_FRAME, bulletMove); // 檢查泡泡 var deadBubble:Object=shotCheck(event.target as MovieClip); if (deadBubble != null) { deadBubble.removeEventListener(Event.ENTER_FRAME, onFramePlaying); bubbleArea.removeChild(deadBubble as MovieClip); score = score + 3; score_txt.text = score.toString(); } } } // 檢查是否射中泡泡 function shotCheck(bullet:MovieClip):Object { // bubbleArea.numChildren 傳回舞台上泡泡的數量 for (var i=0; i< bubbleArea.numChildren; i ++) { // 檢查泡泡與滑鼠子彈準心 x,y 座標是否有碰撞。 true:以實踐範圍, false: 以範圍框(較寬鬆) var hitCheck:Boolean=bubbleArea.getChildAt(i).hitTestPoint(bullet.x, bullet.y, true); if (hitCheck == true) { var deadBubble:Object = bubbleArea.getChildAt(i); } } return deadBubble; }