欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

腳 本 之 家 www.dbjr.com.cn
當前位置 : 主頁 > 媒體動畫 >

Flash CS4教程:詳細解析抓喜鵲游戲教程

來源:互聯(lián)網(wǎng) 作者:佚名 時間:06-09 17:54:02
點評:本教程是向大家解析Flash CS4抓喜鵲游戲的知識,控制游戲過程中用戶移動鼠標指針與創(chuàng)建的隨機對象之間是否接觸并執(zhí)行相對應(yīng)的程序塊,顯示用戶通過移動鼠標指針所撲捉到的喜鵲數(shù)量。
本例應(yīng)用了前幾章節(jié)已經(jīng)學(xué)習的產(chǎn)生隨機對象和刪除對應(yīng)隨機對象等知識,控制游戲過程中用戶移動鼠標指針與創(chuàng)建的隨機對象之間是否接觸并執(zhí)行相對應(yīng)的程序塊,顯示用戶通過移動鼠標指針所撲捉到的喜鵲數(shù)量。本實例還創(chuàng)建游戲的結(jié)束和重新開始程序,用戶可進一步擴展,根據(jù)撲捉到的喜鵲數(shù)量來設(shè)置游戲關(guān)卡和游戲級別。通過本例的制作,讀者可以掌握對簡單基礎(chǔ)游戲的創(chuàng)建全過程,停止游戲和重新開始游戲的控制。

本例思路:
<1> 創(chuàng)建實例背景圖。
<2> 添加按鈕和“成績單”。
<3> 創(chuàng)建喜鵲動畫和手型對象,將其轉(zhuǎn)換為元件類。
<4> 編寫喜鵲元件擴展類。
<5> 編寫主程序類,控制游戲開始與結(jié)束,顯示用戶通過移動鼠標指針所撲捉到的喜鵲數(shù)量。
<6> 隨機創(chuàng)建的喜鵲對象與用戶鼠標指針接觸所執(zhí)行的控制程序。
<7> 停止游戲和重新開始游戲的控制。

實例步驟:

(1)新建一個空白文檔,設(shè)置舞臺大小為650*400,幀頻設(shè)置為30,繪制游戲背景圖或?qū)胍粡堖m合的背景圖作為游戲背景,如下圖13-1所示。

Flash CS4教程:詳細解析抓喜慶游戲教程,PS教程,思緣教程網(wǎng)

 圖13-1 實例背景

(2)新建一個圖層,創(chuàng)建三個按鈕元件,如下圖2-所示,并命名“實例名”為“start_btn” 、“help_btn”、“out_btn” ,分別間隔放置于舞臺右下角,如圖13-2所示。

Flash CS4教程:詳細解析抓喜慶游戲教程,PS教程,思緣教程網(wǎng)

 圖13-2 控制按鈕

(3)新建一個圖層,創(chuàng)建“成績單”,如下圖13-3所示。創(chuàng)建一個動態(tài)文本,添加實例名為“displayGrade_txt”,將用于顯示用戶通過移動鼠標指針所撲捉到的喜鵲數(shù)量。

Flash CS4教程:詳細解析抓喜慶游戲教程,PS教程,思緣教程網(wǎng)

 圖13-3 縮放和繪制投影

(4)創(chuàng)建一個新影片剪輯并命名為“Fly”,擴展元件類也設(shè)為“Fly”。在“Fly”影片剪輯里創(chuàng)建喜鵲飛翔的動畫,如下面演示圖13-4 所示。

Flash CS4教程:詳細解析抓喜慶游戲教程,PS教程,思緣教程網(wǎng)

(1)

Flash CS4教程:詳細解析抓喜慶游戲教程,PS教程,思緣教程網(wǎng)

 (2)

圖13-4 喜鵲和手型

(5)再創(chuàng)建一個影片剪輯,命名為“gotgood_mc” ,在該影片剪輯內(nèi)插放3個關(guān)鍵幀,繪制3個手型,如圖1- (1)、(2)所示。再創(chuàng)建一個影片剪輯,命名為“MouseHand”,同時設(shè)置擴展元件類也為“MouseHand” ,將影片剪輯“gotgood_mc”元件對象放置于此,并命名實例名為“gotgood_mc”,如圖13-5所示。

Flash CS4教程:詳細解析抓喜慶游戲教程,PS教程,思緣教程網(wǎng)

(1)

Flash CS4教程:詳細解析抓喜慶游戲教程,PS教程,思緣教程網(wǎng)

 (2)

Flash CS4教程:詳細解析抓喜慶游戲教程,PS教程,思緣教程網(wǎng)

 (3)

圖13-5 手型

(6)下面先編寫已經(jīng)創(chuàng)建的元件擴展類“FLY” ,該類接收一個Number類型參數(shù),將其賦值作為該類產(chǎn)生對象的y軸方向上的遞減值,如第16行代碼所示,通過在構(gòu)造函數(shù)中為其注冊ENTER_FRAME事件偵聽,使該類對象在被創(chuàng)建時便執(zhí)行事件偵聽器函數(shù)enterFrameHandler ,也就是所創(chuàng)建的每一只喜鵲都以某一速度(變量speed值)作向上運動。此外,該類還提供兩個方法: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("清除實例事件");   
        }   
           
        public function get flySpeed():Number{   
            return this._speed;   
        }   
           
    }   
}

(7)下面是主程序類的編寫,我們在構(gòu)造函數(shù)初始化舞臺的寬度和高度,并創(chuàng)建存儲所有喜鵲對象的容器,如第22到25行代碼所示。在第27到31行代碼隱藏系統(tǒng)鼠標并創(chuàng)建“手型”,通過偵聽stage對象的MOUSE_MOVE和MOUSE_DOWN事件來控制“手型”的鼠標跟隨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()方法是簡單的鼠標跟隨,stageDownHandler()方法是當用戶鼠標點擊時播放步驟(5)中的“手型”影片剪輯動畫,產(chǎn)生“抓”的動作效果。 init()方法中開始初始化該游戲,主要是將displayGrade_txt顯示文本的內(nèi)容設(shè)置為0和為開始按鈕注冊事件偵聽器函數(shù)。當用戶單擊start_btn按鈕后,便調(diào)用startGame()方法,此時,將結(jié)束游戲按鈕out_btn 設(shè)置為可見,并注冊事件偵聽器函數(shù),如第59、60行代碼所示。然后通過創(chuàng)建Timer類對象實例進行計時,每隔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,則將運行計時器,運行次數(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;   
}

(9) copy()偵聽器函數(shù)中,創(chuàng)建“喜鵲”對象,設(shè)置1到11之間的隨機數(shù)作為其隨機速度值,如第70行代碼所示。統(tǒng)一設(shè)置其y坐標為舞臺底部位置,x坐標為隨機舞臺寬度值,如第71、72行代碼所示。將創(chuàng)建的“喜鵲”對象統(tǒng)一添加到content_mc容器中,并注冊ROLL_OVER和ENTER_FRAME事件偵聽。當用戶移動鼠標指針經(jīng)過“喜鵲”對象時,便會調(diào)用downHandler()偵聽器函數(shù),清除其事件偵聽和清除該對象本身,如第81到85行代碼所示,同時也調(diào)用refreshGrade()方法累加計算用戶抓到的“喜鵲”數(shù)量。removeDrop()函數(shù)只是判斷“喜鵲”對象是否運動到舞臺頂部,當運動到舞臺頂部時,清除“喜鵲”對象的事件偵聽和其本身,如第95到100行代碼所示。

AS3代碼

private function copy(event:TimerEvent) {   
       
    var mc = new Fly(Math.random() * 10 + 1);   
    mc.x = Math.random() * this.stageW;   
    mc.y = this.stageH;   
       
    content_mc.addChild(mc);   
    mc.addEventListener(MouseEvent.ROLL_OVER, downHandler);   
    mc.addEventListener(Event.ENTER_FRAME, removeDrop);   
}   
  
private function downHandler(event:MouseEvent) {   
       
    var mc = event.target;   
    mc.removeTimerHandler();   
    mc.removeEventListener(MouseEvent.MOUSE_DOWN, downHandler);   
    mc.removeEventListener(Event.ENTER_FRAME, removeDrop);   
    content_mc.removeChild(mc);   
       
    //refreshGrade(mc.flySpeed);//還可以通過擴展refreshGrade方法,按不同速度得分   
    refreshGrade();//按數(shù)量   
       
}   
  
private function removeDrop(event:Event) {   
    var _mc:MovieClip = event.target as MovieClip;   
       
    if (_mc.y <= 0) {   
        _mc.removeTimerHandler();   
        _mc.removeEventListener(MouseEvent.MOUSE_DOWN, downHandler);   
        _mc.removeEventListener(Event.ENTER_FRAME, removeDrop);   
        content_mc.removeChild(_mc);   
    }   
       
}   
  
public function refreshGrade(grade:Number = 1):void {   
    this._grade += grade;   
    displayGrade_txt.text = this._grade.toString();   
}

(10)下面代碼是對結(jié)束游戲的控制和重新開始初始化游戲。當用戶單擊“結(jié)束游戲”按鈕便調(diào)用該方法,停止_timer對象的計時,將“開始游戲”按鈕顯示出來同時隱藏“結(jié)束游戲”按鈕,如下面第111到113行代碼所示。然后清除容器中的所有子項偵聽和子項,如第116到124行代碼所示,再重新調(diào)用init()方法。

AS3代碼

        private function outGame(event:MouseEvent):void{   
               
            _timer.stop();   
            start_btn.visible = true;   
            out_btn.visible = false;   
               
            //下面清除容器中的所有子項偵聽和子項   
            var num:uint = content_mc.numChildren;   
            var _mc:MovieClip;   
            for (var i:int = 0; i <num; i++) {   
                   
                _mc = content_mc.getChildAt(0) as MovieClip;   
                _mc.removeEventListener(MouseEvent.MOUSE_DOWN, downHandler);   
                _mc.removeEventListener(Event.ENTER_FRAME, removeDrop);   
                content_mc.removeChild(_mc);   
            }   
               
            init();   
               
        }   
           
           
    }   
}

以上教程就是解析Flash CS4抓喜鵲游戲的知識,希望大家都能學(xué)到這樣的基礎(chǔ)知識。謝謝大家觀看。

 

Tag:flash   CS4   喜鵲  
上一篇:AS3與JS之間的簡單自定義參數(shù)通訊
下一篇:沒有了

猜你喜歡

網(wǎng)友評論