游戏设计模式:状态模式

前言:状态机模式是一个游戏常用的经典设计模式,常被用作管理一种物体的各种状态(例如管理人物的行走,站立,跳跃等状态)。 (Unity里的Animator就是

前言:状态机模式是一个游戏常用的经典设计模式,常被用作管理一种物体的各种状态(例如管理人物的行走,站立,跳跃等状态)。

 

(Unity里的Animator就是一种典型的状态机,用于控制动画状态之间的切换)

 

假如我们正在开发一款动作游戏,当前的任务是实现根据输入来控制主角的行为——当按下B键时,他应该跳跃。

直观的代码:

    if (input == PRESS_B) {
        if (!m_isJumping) {
            m_isJumping = true;
            Jump();//跳跃的代码
        }
    }

后来我们需要添加更多行为了,所有行为如下:

站立时按下 ↓ 键 =》 蹲下。

蹲下时按下 ↓ 键 =》 站立。

站立时按下 B 键 =》 跳跃。

跳跃时按下 ↓ 键 =》触发 俯冲。

    if (input == PRESS_B) {
        //如果在站立时且没在跳跃,则跳跃
        if (!m_isJumping && m_isStanding) {
            m_isJumping = true;
            player.jump();//跳跃的代码
        }
    }
    else if (input == PRESS_DOWN) {
        //如果在跳跃时且没在俯冲,则俯冲
        if (m_isJumping && !m_isDiving) {
            m_isDiving
            player.dive();//俯冲的代码
        }
        //如果没在跳跃
        else if (!m_isJumping) {
            //如果站立时,则蹲下
            if (m_isStanding) {
                m_isStanding = false;
                player.sneak();//蹲下的代码
            }