项目记录22-- tolua基于lua框架事件派发
每天晚上抽点时间写一点点就一点点,曾经不写博客可是如今。不为别的仅仅是为了告诉别人我还存在。
这几天在地铁上发现好多人都还在玩消除游戏,今天起码看到5个人,可是玩的版本号都不一样。看来休闲游戏还是有市场的。
(题外话)
说到lua的事件派发。事实上非常easy就是一个table的事,这个是View里面自己的一个内置派发。全部view都继承它。还有就是我不是大神,仅仅是任劳任怨的小兵。全部就简单化了。
--[[
2016-2-23 xinghua
]]
local EventDispatcher = class("EventDispatcher")
local _Events = nil
function EventDispatcher:ctor( )
_Events = {}
end
--[[
表结构
{
type = {
Listener1,
Listener2
}
}
]]
--注冊监听事件
function EventDispatcher:AddEventListener(stype,Listener)
if type(stype) ~= "string" or type(Listener) ~= "function" then
error("AddEventListener error : type error ",2)
return
end
--获取_Events里面事件
local eventlist = _Events[stype]
if eventlist == nil then
eventlist = {}
table.insert(eventlist,Listener) --想队列里面插入一个事件
_Events[stype] = eventlist --放到大表里面
else
local func = eventlist[Listener]
if func == nil then
table.insert(eventlist,Listener)
else
error("AddEventListener error : listeren hai in")
end
end
end
--[[
触发
]]
function EventDispatcher:Dispatcher(stype,...)
if type(stype) ~= "string" then
error("Dispatcher error : stype error",1)
return
end
local listeners = _Events[stype]
if listeners == nil or #listeners <= 0 then
return
end
for i,v in ipairs(listeners) do
v(...)
end
end
--[[
移除指定类型的全部关联事件侦听,假设參数为nil则删除当前注冊器中全部的函数侦听
listener ~= nil 删除这个类型里面这个监听
]]
function EventDispatcher:RemoveEventListeners(stype,listener)
--空删除全部清空表
if stype == nil then
--获取keys
local keys = table.keys(_Events)
for i,v in ipairs(keys) do
_Events[v] = nil --设置为空
end
return
end
if type(stype) ~= "string" then
error("RemoveEventListeners error : stype no string",2)
return
end
local typeListeners = _Events[stype] --取出里面全部的这个类型的func
--依据类型删除
if listener ~= nil and type(listener) == "function" then
if typeListeners ~= nil and table.nums(typeListeners) > 0 then
if typeListeners[listener] ~= nil then
typeListeners[listener] = nil
end
end
return
end
--删除一个类型
if typeListeners ~= nil then
_Events[stype] = nil
end
end
function EventDispatcher:DumpEvent( )
dump(_Events)
end
return EventDispatcher
2016-2-23 xinghua
]]
local EventDispatcher = class("EventDispatcher")
local _Events = nil
function EventDispatcher:ctor( )
_Events = {}
end
--[[
表结构
{
type = {
Listener1,
Listener2
}
}
]]
--注冊监听事件
function EventDispatcher:AddEventListener(stype,Listener)
if type(stype) ~= "string" or type(Listener) ~= "function" then
error("AddEventListener error : type error ",2)
return
end
--获取_Events里面事件
local eventlist = _Events[stype]
if eventlist == nil then
eventlist = {}
table.insert(eventlist,Listener) --想队列里面插入一个事件
_Events[stype] = eventlist --放到大表里面
else
local func = eventlist[Listener]
if func == nil then
table.insert(eventlist,Listener)
else
error("AddEventListener error : listeren hai in")
end
end
end
--[[
触发
]]
function EventDispatcher:Dispatcher(stype,...)
if type(stype) ~= "string" then
error("Dispatcher error : stype error",1)
return
end
local listeners = _Events[stype]
if listeners == nil or #listeners <= 0 then
return
end
for i,v in ipairs(listeners) do
v(...)
end
end
--[[
移除指定类型的全部关联事件侦听,假设參数为nil则删除当前注冊器中全部的函数侦听
listener ~= nil 删除这个类型里面这个监听
]]
function EventDispatcher:RemoveEventListeners(stype,listener)
--空删除全部清空表
if stype == nil then
--获取keys
local keys = table.keys(_Events)
for i,v in ipairs(keys) do
_Events[v] = nil --设置为空
end
return
end
if type(stype) ~= "string" then
error("RemoveEventListeners error : stype no string",2)
return
end
local typeListeners = _Events[stype] --取出里面全部的这个类型的func
--依据类型删除
if listener ~= nil and type(listener) == "function" then
if typeListeners ~= nil and table.nums(typeListeners) > 0 then
if typeListeners[listener] ~= nil then
typeListeners[listener] = nil
end
end
return
end
--删除一个类型
if typeListeners ~= nil then
_Events[stype] = nil
end
end
function EventDispatcher:DumpEvent( )
dump(_Events)
end
return EventDispatcher