先提供下载地址:http://pan.baidu.com/s/1kTqsD6n
解压缩出来直接双击exe就可以运行了,代码在src里面,目录是这样的
分成6个版本,高层模块的调用在scenes中的MainScene.lua中,代码可见
版本控制在onEnter()函数中,按对应的字母键调用不同的函数进行状态切换
最后一个版本的运行结果如下:
全部代码已经提供出来了,大家可以自己去看,下面说下优化方向:
1.状态创建器,并不需要为每一个兵种实例对象创建一个新的状态创建器,创建一个,所有兵种对象共用
2.状态切换规则,同状态创建器一样,基本上所有的兵种对象的状态切换规则都一样,如有需求,则创建新的绑定
3.具体状态,每次进行主状态的切换或子状态的添加时都创建一个新的实例对象,这样没什么必要,将新创建的状态
实例对象放到数组中,切换或添加时先在数组中找有没有,没有则创建后放到数组中,有的话直接拿出来用
简单说一下,在战斗类型的游戏中,对象的状态切换主要是技能,buff,和AI这三部分去控制,
大部分状态切换由控制buff驱动,下面来说下MajorStateBase的设计初衷
我们将状态区分为主状态和子状态,主要原因有以下几点
1.是通过继承不同基类,当拿到实例对象时,可以通过getStateType()接口区别是主状态还是子状态
2.实现特殊需求,在技能设计中,有些技能会打断角色当前的状态,
如角色处于攻击状态,准备执行攻击动作,这时受到一个带有打断动作的技能,那么攻击被打断,
切换到待机状态,状态被打断可能需要做一些处理,在设计中只有主状态会被打断,如攻击状态,
召唤状态等等,每个主状态被打断需要做不同的处理,那么我们可以在主状态基类MajorStateBase
里加上对应的打断接口供外部调用,在具体的主状态中重写函数,实现不同的被打断逻辑
到目前为止我们已经实现一个比较高级的状态机,下面一篇文章中将说一下进阶的状态机