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

14 篇文章 1 订阅

上一篇文章《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这个动作,并不改变状态,属于瞬时过程。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值