状态机--状态机7,关于战斗兵种的状态机进阶设计与消息系统

在状态机6已经把一个稍微高级一点的状态机实现了,能够应付大部分的需求,

但是还是有些不足的地方,那就是没有对应的消息处理机制,一个角色在战斗

中有时是需要接收并处理消息的,举个栗子,十万个冷笑话和天天来战这样的

游戏中,怪被角色使用技能攻击后有时会飘字,如:啊,好强大啊~~~,大侠

饶命之类的一些表现,


那么流程是这样的:使用技能攻击--->技能生效--->发送广播消息--->对象接收

消息并判断是否要处理,需要则处理,不需要则不处理


我们来看下战斗中的流程,战斗中角色使用技能攻击范围内的怪,技能生效时

广播一个消息,所有怪接收到消息后传递状态机,状态机再传递给所有具体的

状态,受击状态接收到消息后根据扣除的血量大小从消息中取出符合表述的内

容,如扣除的血量较小则是“雕虫小~~”,扣除血量较多的则是“大侠饶命~~~”,

只有受击状态才处理消息,其他状态不处理,下面把大概的代码贴贴出来,之前

已有的代码就不贴出来了,只是抛个大概的概念而已


EventSystem.lua:消息系统,用于发送消息,设计成单例,将需要接收消息的

对象进行注册,要发送的消息也可以设计成对象,每次发送生成一个消息对象发送

local EventSystem = class("EventSystem")

function EventSystem:ctor()
    self.tObject = {}
end

function EventSystem:addObject(object)
    table.insert(self.tObject, object)
end

function EventSystem:removeObject(object)
    table.removebyvalue(self.tObject, object, true)
end

function EventSystem:sendMessage(parms)
    for _, object in pairs(self.tObject) do
        object:sendMessage(parms)
    end
end


Soldier.lua:兵种类,加了一个handleMessage()接口

local Soldier = class("Soldier")

function Soldier:ctor()

end

function Soldier:bindStateMachine(stateMachine)
    self.stateMachine = stateMachine
end

function Soldier:handleMessage(parms)
    self.stateMachine:handleMessage(parms)
end


StateMachine.lua


local StateMachine = class("StateMachine")

function StateMachine:ctor()

end

function StateMachine:handleMessage(parms)
    local tAllState = self:getAllState()
    for _, state in pairs(tAllState) do
        state:handleMessage(parms)
    end
end

return StateMachine

StateBase.lua

local StateBase = class("StateBase")

function StateBase:ctor()

end

function StateBase:handleMessage(parms)
    --子类重写此函数,处理属性自己的消息
end

return StateBase


下一篇讲一下更变态一点的



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值