基础·AS3下的基本游戏框架之一

    技术2022-05-20  33

    三个重点:状态循环、游戏频率、事件模型。

    //状态循环

    public function gameLoop(e:Event):void{

    switch(gameState){

      case STATE_INIT: initGame();

                                  break;

      case STATE_PLAY: playGame();

                                  break;

      case STATE_GAME_OVER: endGame();

                                  break;

     }

    }

     

    //游戏频率,注意ENTER_FRAME 关键是“帧频”

    public function Game(){      //类Game的构造函数

    addEventListener(Event.ENTER_FRAME,gameLoop);

    gameState = STATE_INIT;

    }

     

    //事件模型

    public function initGame():void{

    stage.addEventListener(MouseEvent.CLICK,onMouseEventHandler);

    clicks=0;

    gameState = STATE_PLAY;

    }

     

    public function playGame(){

    if(clicks>=10){

     gameState = STATE_GAME_OVER;

     }

    }

     

    public function onMouseEventHandler(e:MouseEvent){

    clicks++;

    }

     

    完整的示例代码如下:

    package{ import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; public class Game extends MovieClip{ public static const STATE_INIT:int = 10; public static const STATE_PLAY:int = 20; public static const STATE_GAME_OVER:int = 30; public var gameState:int = 0; public var clicks:int = 0; public function Game(){ addEventListener(Event.ENTER_FRAME,gameLoop); gameState = STATE_INIT; } public function gameLoop(e:Event):void{ switch(gameState){ case STATE_INIT: initGame(); break; case STATE_PLAY: playGame(); break; case SATE_GAME_OVER: endGame(); break; } } public function initGame():void{ stage.addEventListener(MouseEvent.CLICK,onMouseClickEventHandler); clicks = 0; gameState = STATE_PLAY; } public function onMouseClickEventHandler(e:MouseEvent){ clicks++; } public function playGame():void{ if(clicks>=10){ gameState = STATE_GAME_OVER; } } public function endGame():void{ stage.removeEventListener(MouseEvent.CLICK,onMouseClickEventHandler); gameState = STATE_INIT; trace("game over"); } } }


    最新回复(0)