zoukankan      html  css  js  c++  java
  • 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 一系列的输入和事件发送给machine
    4 状态切换
    ```
    
    ```
    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 解决)
    ```
  • 相关阅读:
    java 数组的定义
    java 流程控制语句
    java 跳转语句(break、continue)
    java 循环嵌套
    java连接数据库
    用JAVA给数据库增加和修改数据代码
    简单匿名内部类的写法
    抽象类的定义以及简单代码
    继承多态的简单代码
    单例模式
  • 原文地址:https://www.cnblogs.com/lightlfyan/p/4229438.html
Copyright © 2011-2022 走看看