zoukankan      html  css  js  c++  java
  • 状态机

    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();
    }
  • 相关阅读:
    JDK的KeyTool和KeyStore等加密相关
    关于分布式事务的随笔[待续]
    Netty实例几则
    Disruptor快速入门
    Java获取系统环境信息
    JDK的BIO, NIO, AIO
    四种常用IO模型
    JDK的多线程与并发库
    递归转换为迭代的一种通用方式
    二叉树的java实现
  • 原文地址:https://www.cnblogs.com/kingBook/p/5589925.html
Copyright © 2011-2022 走看看