|
发表于 2004-7-21 22:46:00
|
显示全部楼层
Re: 游戏结构。。
状态机里保存的临时数据如npc-move是某个特定的npc移动产生还是所有的npc移动都会产生npc-move?
内存池的大小为512个node,如果npc-move是某个特定的npc移动产生,那么就会有象npc-move-1。。。npc-move-n这样的状态,512个node显然是不够的,在网游服务器端的话至少要50000个,而不管状态有没有改变,每个要处理该状态的模块都会在状态机中查询,这样的话还不如在处理模块中保存状态数据的指针或者采用消息投递的模式效率更高。
如果是所有的npc都产生npc-move,那么如果在ProcessModule(处理npc-move消息的模块)之前有2个npc产生npc-move消息,那么先产生的npc-move在未被处理只前就被状态机丢弃了
int CFiniteStateMachine::Set(const char *varName, void *varvalue)
{
if(m_hasher.Find(varName) != NULL)
{
m_hasher.Remove(varName);<-----如果已经有npc-move则先remove在加入新数据
return m_hasher.Enter(varName, varvalue);
}
return m_hasher.Enter(varName, varvalue);
}
|
|