状态机--状态机4,关于战斗中负责兵种状态切换的状态机

前面花了4篇文章废话了那么多却没有提到传说中的状态机,那么这一篇就来讲讲那个

传说中的状态机到底是个长什么样的东东,前面几篇主要是做铺垫用,下面总结下:


1.状态切换由事件驱动,如调用onIdle()进入待机状态,调用onWalk()进入行走状态

2.状态有进入,也有退出,如调用onFrozen()进入冰冻状态,调用onFrozenEnd()退出冰冻状态

3.状态之间的切换是有限制条件的,如处于冰冻状态不能切换到攻击状态或行走状态


流程:事件--->状态机--->匹配状态切换规则--->可切换,新状态进入,旧状态退出


简单说下代码逻辑,兵种类中提供事件接口,如onWalk(),onAttack()等

实现一个状态机,将状态机绑定到兵种对象上,将状态切换规则提取出,

绑定到状态机上,实现一个状态创建器用来创建状态,绑定到状态机中,

从结构上看就是兵种身上有一个状态机,状态机里有状态切换规则和状态

创建器,下面来看代码:


StateId.lua,首先定义状态id,这个比较简单,不多说,下面的name不是必要的,只是方便调试

local StateId = {}

StateId.unKnown = -1
StateId.idle = 1 --待机
StateId.walk = 2 --行走
StateId.attack = 3 --攻击
StateId.frozen = 4 --冰冻
StateId.vertigo = 5 --眩晕

StateId.name = {}
StateId.name[StateId.idle] = "待机状态"
StateId.name[StateId.walk] = "行走状态"
StateId.name[StateId.attack] = "攻击状态"
StateId.name[StateId.frozen] = "冰冻状态"
StateId.name[StateId.vertigo] = "眩晕状态"

return StateId


Soldier.lua,兵种类,定义了事件接口,绑定状态机,将状态切换委托给状态机去处理:

local StateId = require("app.edition5.state.StateId")
local Soldier = class("Soldier")

function Soldier:ctor()

end

--绑定状态机
function Soldier:bindStateMachine(stateMachine)
    self.stateMachine = stateMachine  
    self.stateMachine:bindSoldier(self)      
end

--待机
function Soldier:onIdle()
    self:toggleState(StateId.idle)
end

--行走
function Soldier:onWalk()
    self:toggleState(StateId.walk)
end

--攻击
function Soldier:onAttack()
    self:toggleState(StateId.attack)
end

--冰冻
function Soldier:onFrozen()
    self:toggleState(StateId.frozen)
end

--冰冻结束
function Soldier:onFrozenEnd()
    self:onIdle()
end

--眩晕
function Soldier:onVertigo()
    self:toggleState(StateId.vertigo)
end

--切换状态
function Soldier:toggleState(iStateId)
    self.stateMachine:toggleState(iStateId)
end

--切换状态失败
function Soldier:toggleStateFail(iCurrentStateId, iNewStateId)
    print("无法从状态 ( " .. StateId.name[iCurrentStateId] .. " ) 切换到状态 ( " .. StateId.name[iNewStateId] .. " )")
end

return Soldier


StateRuleConfig.lua:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
      《地下守护神》是暗黑魔幻风格的ARPG手游,是真正按照商业级技术水准研发的Unity大型教学案例。这是“刘老师讲Unity”课程体系到目前为止最重量级教学课程,本课程将带领大家从手游前端各重要功能开发(基于MVC框架搭建、)到网络端的方方面面知识点,一一进行详细还原讲解,使得学员在短期内游戏研发能力有个质的突破,“主程”虚位以待,等待您的加入。 单机版主要技术点:    1: 前端分层的MVC架构设计,开发自定义的资源动态加载插件、音频插件、对话系统插件、事件监听插件、自定义强大的对象缓冲池脚本插件进行项目性能大幅提升等。    2: UI粒子特效、场景淡入淡出控制。    3: 单机与移动端的双输入控制系统开发。    4: 数值平衡处理与开发。    5: 多种设计模式在游戏研发过程的灵活运用。    6: XML技术的灵活运用,在系统解耦与资源国际化方面的技术突破。    7: 开发强大灵活的日志系统插件,应对服务器与移动端的各种复杂系统调试需求。温馨提示:        本课程使用Virtual Studio2012,以及Unity5.2 进行开发与讲解。(推荐学员使用Unity5.2 版本减少开发过程不必要的麻烦,VS使用更高版本则没有任何影响。) A:《MMOARPG地下守护神_单机版实战视频课程(上部)》https://edu.csdn.net/course/detail/24965B:《MMOARPG地下守护神_单机版实战视频课程(下部)》https://edu.csdn.net/course/detail/24979  

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值