在状态机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
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
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
下一篇讲一下更变态一点的