状态机--状态机6,关于战斗兵种的状态机初步优化和状态设计

先提供下载地址:http://pan.baidu.com/s/1kTqsD6n

解压缩出来直接双击exe就可以运行了,代码在src里面,目录是这样的

分成6个版本,高层模块的调用在scenes中的MainScene.lua中,代码可见



版本控制在onEnter()函数中,按对应的字母键调用不同的函数进行状态切换



最后一个版本的运行结果如下:



全部代码已经提供出来了,大家可以自己去看,下面说下优化方向:

1.状态创建器,并不需要为每一个兵种实例对象创建一个新的状态创建器,创建一个,所有兵种对象共用

2.状态切换规则,同状态创建器一样,基本上所有的兵种对象的状态切换规则都一样,如有需求,则创建新的绑定

3.具体状态,每次进行主状态的切换或子状态的添加时都创建一个新的实例对象,这样没什么必要,将新创建的状态

实例对象放到数组中,切换或添加时先在数组中找有没有,没有则创建后放到数组中,有的话直接拿出来用


简单说一下,在战斗类型的游戏中,对象的状态切换主要是技能,buff,和AI这三部分去控制,

大部分状态切换由控制buff驱动,下面来说下MajorStateBase的设计初衷

我们将状态区分为主状态和子状态,主要原因有以下几点

1.是通过继承不同基类,当拿到实例对象时,可以通过getStateType()接口区别是主状态还是子状态

2.实现特殊需求,在技能设计中,有些技能会打断角色当前的状态,

如角色处于攻击状态,准备执行攻击动作,这时受到一个带有打断动作的技能,那么攻击被打断,

切换到待机状态,状态被打断可能需要做一些处理,在设计中只有主状态会被打断,如攻击状态,

召唤状态等等,每个主状态被打断需要做不同的处理,那么我们可以在主状态基类MajorStateBase

里加上对应的打断接口供外部调用,在具体的主状态中重写函数,实现不同的被打断逻辑


到目前为止我们已经实现一个比较高级的状态机,下面一篇文章中将说一下进阶的状态机



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值