通常會(huì)遇到這樣的需求看幼,例如 玩家升級(jí) 引起 增加血量孙乖、開(kāi)啟新的功能访递、分配新任務(wù),等類(lèi)似一對(duì)多的觸發(fā)邏輯亮航。那么我們可以創(chuàng)建一個(gè) upLevel = Event:New() 事件荸实,在玩家升級(jí)的時(shí)候觸發(fā)該事件 upLevel:call(),如果我們已在功能系統(tǒng)缴淋、任務(wù)系統(tǒng)中增加的玩家升級(jí)的事件的關(guān)聯(lián)方法准给,那么當(dāng)玩家升級(jí)時(shí)會(huì)觸發(fā)關(guān)聯(lián)的方法。
local Event = {}
Event.__index = Event
Event.__call = function(t, ... )
for k,v in pairs(t.events) do
pcall(v, ...)
end
end
function Event.New(cls)
local self = setmetatable({},cls)
self.events = {}
return self
end
function Event:add(func)
if func then
self.events[func] = func
end
end
function Event:remove(func)
if func then
self.events[func] = nil
end
end
function Event:clear()
self.events = {}
end
function Event:call( ... )
for k,v in pairs(self.events) do
pcall(v, ...)
end
end
function test()
local f1 = function( ... )
print("call f1>>", ...)
end
local f2 = function( ... )
print("call f2>>", ...)
end
local e = Event:New()
e:add(f1)
e:add(f2)
e()
end
return Event
使用
通常使用 add 和 call 就夠了重抖。創(chuàng)建一個(gè)掛在玩家身上的事件露氮,用于表示升級(jí)這個(gè)觸發(fā)系統(tǒng)。
role.upLevel = Event:New()
-- 監(jiān)聽(tīng)
role.upLevel:add(task.onUpLevel)
role.upLevel:add(open.onUpLevel)
-- 玩家升級(jí)的時(shí)候觸發(fā)
role.upLevel()