三个重点:状态循环、游戏频率、事件模型。
//状态循环
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"); } } }