900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > FSM:网络游戏开发中的有限状态机(实践篇)

FSM:网络游戏开发中的有限状态机(实践篇)

时间:2022-07-21 13:53:45

相关推荐

FSM:网络游戏开发中的有限状态机(实践篇)

上一篇文章《FSM:网络游戏开发中的有限状态机(理论篇)》中,讲解了FSM的基础知识。这里,我结合图形及具体例子,讲解下FSM在实际开发中的运用。

首先,图解下上篇文章中提到的各种action。

1.InputAction:某状态下收到某事件,输出相应动作。这里不发生状态变更,只是对输入事件的一个响应。属于瞬时动作。

2.LeaveAction:离开某一状态时的相应动作。这个动作以后,到达下一状态。

3.TransferAction:某一状态到另一状态过程中的事件/动作。state1由于事件/动作action,转换为state2.它其实是EntryAction与LeaveAction的结合。

4.EntryAction:进入某一状态的动作/事件。

设计一个状态机,最重要的部分是设计一个良好的状态图,这个状态图能在代码中被严谨清晰的解析出来。所以其实我们关键要做两件事,一是设计合理的状态图,二是完成状态图的解析。下面结合游戏系统的一些代码进行这方面的讲解。

游戏中的装备系统,我们可以简单划分为上装状态(installState)与初始(下装)状态(standbyState)。状态划分代码如下:

standbyState={event={[EquipEvents.CS_Install]="verifyInstall",},target={[EquipEvents.CS_Install]="installState",},action={entryAction={},leaveAction={}, transferAction={},inputAction={[EquipEvents.S_Fix]="fix",[EquipEvents.S_SpecialFix]="specialFix"},timeOut={},},}

installState={event={[EquipEvents.CS_Uninstall]="verifyUninstall",},target={[EquipEvents.CS_Uninstall]="standbyState",},action={entryAction={"install",},leaveAction={"uninstall"},transferAction={},inputAction={[EquipEvents.S_Fix]="fix",[EquipEvents.S_SpecialFix]="specialFix"},timeOut={},},}

刚开始装备处于standbyState,收到上装事件EquipEvents.CS_Install后,变为installState。状态图的解析按以下流程进行:

1.判断是否存在下一状态,如果不存在,即做inputAction。因为收到的事件在这里面无映射,并且存在下一状态installState,所以这个action不做事。

2.存在下一状态。做leaveAction。无映射,不做事。

3.做transferAction。无映射,不做事。

4.以上都做完后,状态变为下一状态,即installState。开始做entryAction。这里因为我们已经到达installState,所以entryAction要去installState中找。发现存在一个动作install,于是开始做上装这个动作。

至此,完成上装过程。另外,在installState中,我们去修理装备(fix),状态机的解析只做inputAction后,就结束,只做fix这个动作,并不改变状态,属于瞬时过程。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
有限状态机FSM

有限状态机FSM

2022-01-13

有限状态机(FSM)

有限状态机(FSM)

2021-08-22

有限状态机/FSM

有限状态机/FSM

2023-09-09

【算法】有限状态机FSM

【算法】有限状态机FSM

2023-12-02