package framework.fsm{
public class Fsm{
protected var _curState:State;
protected var _callbackChangeState:Function;
/**
* 状态机
* @param defaultState 默认状态
* @param callbackChangeState 改变状态回调函数 function(state:State):void;
*/
public function Fsm(defaultState:State,callbackChangeState:Function){
_callbackChangeState=callbackChangeState;
changeState(defaultState);
}
public function changeState(state:State):void{
if(_curState)_curState.dispose();
_curState=state;
_callbackChangeState(_curState);
}
public function update():void{
_curState.execute();
}
public function dispose():void{
_curState=null;
_callbackChangeState=null;
}
public function get curState():State{return _curState;}
};
}
package framework.fsm{
public class State{
public function execute():void{}
public function dispose():void{}
};
}
package app{
import framework.fsm.Fsm;
import framework.fsm.State;
public class StatePlayerIdle extends State{
private var _player:Player;
public function StatePlayerIdle(player:Player){
_player=player;
}
override public function execute():void{
//这个状态切换到其他状态的条件
if(_player.isDeath){
_player.fsm.changeState(new StatePlayerDeath(_player));
}else if(_player.isInAir){
if(_player.vy<0){
_player.fsm.changeState(new StatePlayerJumpUp(_player));
}else{
_player.fsm.changeState(new StatePlayerJumpDown(_player));
}
}else if(!_player.isInAir && _player.isPressLR){
_player.fsm.changeState(new StatePlayerWalk(_player));
}
}
override public function dispose():void{
_player=null;
}
};
}
private var _fsm:Fsm;
_fsm=new Fsm(new StatePlayerIdle(this),changeStateHandler);
private function changeStateHandler(state:State):void{
if(state is PlayerStateIdle){
//改变外观代码
}
}
private function update():void{
_fsm.update();
}