游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2593|回复: 1

CHostState状态转移

[复制链接]

12

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2003-10-28 19:12:00 | 显示全部楼层 |阅读模式

在消息循环中调用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。

90

主题

797

帖子

833

积分

高级会员

论坛版主

Rank: 4

积分
833
QQ
发表于 2003-10-28 23:02:00 | 显示全部楼层

Re:CHostState状态转移

哦,明白了,为什么状态机队列长度是一
原来这些状态都是唯一的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-5-11 05:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表