开发日志 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);
            }
        }

posted @ 2010-06-01 20:09  向恺然  阅读(166)  评论(0编辑  收藏  举报

我必须说的是:我崇尚开源,但鄙视剽窃。本博客所有引用的图片,文章,和代码,均只作为研究学习使用,不作为商业应用。如果我无意中冒犯了您,请发消息留言,我将立即删除。