首页 > 代码库 > 6_State 游戏开发中使用状态机

6_State 游戏开发中使用状态机

### State不好的代码```//处理玩家输入的代码void Heroine::handleInput(Input input){  if (input == PRESS_B)  {    if (!isJumping_ && !isDucking_)    {      // Jump...    }  }  else if (input == PRESS_DOWN)  {    if (!isJumping_)    {      isDucking_ = true;      setGraphics(IMAGE_DUCK);    }    else    {      isJumping_ = false;      setGraphics(IMAGE_DIVE);    }  }  else if (input == RELEASE_DOWN)  {    if (isDucking_)    {      // Stand...    }  }}```FSM```1 machine有几种状态2 同一时间machine只有一种状态3 一系列的输入和事件发送给machine4 状态切换``````class IState{    virtual void HandleInput() = 0;}class State1: IState {    void HandleInput(){}}class Hero {    IState state;    void HandleInput(){        this.state.HandleInput();    }}// 可使用多个状态机在hero身上void Heroine::handleInput(Input input){  state_->handleInput(*this, input);  equipment_->handleInput(*this, input);}```###状态机的目的是将某一种状态的所有处理封装到一个类里##缺点```复杂ai(状态机不适用)状态历史(use state stack 解决)```

 

6_State 游戏开发中使用状态机