1、定义状态机类型
enum PlayerState{ INVALID, STAND, MOVE, ATTACK, DIE };
void Player::Update(float ts){ switch(user_state_){ case STAND: Stand(ts); break; case MOVE: Move(ts); break; case ATTACK: Attack(ts); break; case DIE: Die(); return; default: std::cout<<"error\n"; } if(hp_ <= 0){ SetState(DIE); } }3、切换状态,在切换状态的时候做一些事情
void Player::SetState(PlayerState state){ if(state == user_state_){ return; } switch(state){ case STAND: std::cout << "----begin stand--------\n"; break; case MOVE: std::cout << "----begin move--------\n"; break; case ATTACK: std::cout << "----begin attack--------\n"; break; case DIE: std::cout << "----begin die--------\n"; break; default: std::cout <<"the state is error"; break; } user_state_ = state; }
状态机面向对象类型:
面向对象类的状态机是一种更容易扩展的新型状态机,通过单间实现方式,使用更少的内存,先看下整个状态机的uml设计图。
原文地址:http://blog.csdn.net/hackmind/article/details/40370599