开发日志 6-1
Gut no fish till you get them.
........... * * *...................... * * *....................................
1) FSM:
昨天在做一个FSM的小例子的时候出现一个奇怪的现在,有一个状态有进入和退出动作,但没有执行动作。经过仔细检查后,发现是因为,几个状态同时满足了条件,比如劳累程度已经到了-->休息的时候,同时挖的金子已经装满了口袋--->存银行,这时候后面的状态把前面的状态冲抵掉了。
//注意这样几个状态并行判断的时候,后面的有可能把前面的冲抵掉,是否应该做成一个队列,或者有一个优先级,这是一个需要非常注意的地方,因为这里会产生和预期的不同的效果,而且难以察觉
if (_owner.Fatigued()) //这是一些TriggerEvent。
{
_owner.GetFSM().ChangeState(GoHomeAndSleepTilRested.Instance());
}
if (_owner.PocketFull())
{
_owner.GetFSM().ChangeState(VisitBankAndDepositGold.Instance());
}
if (_owner.Thirsty())
{
_owner.GetFSM().ChangeState(QuenchThirst.Instance());
}
另外在实现StateBlip的时候,实际上是在做一个HSM。
public virtual void Update()
{
//如果全局状态存在,则调用它的执行方法,这样实际上是给状态分了不同的层次,这是HSM(层次状态机)的概念
if (m_pGlobalState != null)
{
m_pGlobalState.Execute(m_pOwner);
}
//如果当前状态存在,则调用它的执行方法
if (m_pCurrentState != null)
{
m_pCurrentState.Execute(m_pOwner);
}
}