|
在消息循环中调用HostState_Frame()处理CHostState状态转移。
CHostState定义了8种状态:
HS_NEW_GAME = 0,
HS_LOAD_GAME,
HS_CHANGE_LEVEL_SP,
HS_CHANGE_LEVEL_MP,
HS_RUN,
HS_GAME_SHUTDOWN,
HS_SHUTDOWN,
HS_RESTART
最重要的状态是HS_RUN,运行状态。
在CEngine.Load()中调用HostState_Init()初始化为HS_RUN。
其它状态可归为非运行态,非运行态为暂时状态。
非运行态将在HostState_Frame()状态处理主循环中转变为HS_RUN。
CHostState维护一个状态队列,处理完当前状态,进入下一状态,
直到所有非运行状态处理完毕,最后进入运行状态HS_RUN。
处于HS_RUN状态时就调用Host_RunFrame()。
除了关闭,重启状态,其它非运行态处理之后都调用
SetState( HS_RUN, true );
使状态进入HS_RUN,并清空状态队列。
状态队列其实就一个m_nextState,所以可以认为队列长度为1。
清空状态队列就是将m_nextState设为HS_RUN。
概括一下就是,CHostState是一个从HS_RUN到HS_RUN的自环,
偶尔绕个圈子处理其它状态但立即返回HS_RUN。 |
|