Lua事件訊息的寫法

2021-09-14 04:58:09 字數 3416 閱讀 9182

最近在學習xlua與專案的結合,在這裡我們要時間的內容有

監聽事件訊息,觸發事件訊息,移除事件訊息,在監聽與觸發的時候都需要能夠傳值給監聽方法

寫個基本的建立類的方法,用於給事件訊息建立物件

function

******class()

local class_type =

class_type.

new=

function()

local self =

setmetatable

( self ,

)return self

endreturn class_type

end

建立事件訊息物件

require

("******class"

)local eventmessage =

******class()

function eventmessage:

create()

local obj = eventmessage:

new(

) obj.data =

return obj

end

新增監聽

--[[

self.data 裝的是事件資訊表

結構分析

data [事件名]=]

]function eventmessage:

addnotify

(event_name, callback, attachparam)

if(event_name == nil

or callback == nil

or type

(callback)~=

"function"

or type

(event_name)~=

"string"

) then

__logerror

("addnotify error.param invaild"

)return

endif

(self.data[event_name]

== nil) then

self.data[event_name]

= end

for i,v in

ipairs

(self.data[event_name])do

if(v.callback == callback) then

if(v.enable ==

false

) then

v.enable =

true

v.attachparam = attachparam

else

__logerror

("addnotify error.repeat added. "

..event_name)

endreturn

endend

table.

insert

(self.data[event_name],)

end

移除監聽並不會做刪除操作,只是禁用

function eventmessage:

removenotify

(event_name, callback)

if(event_name == nil

or callback == nil

or type

(callback)~=

"function"

or type

(event_name)~=

"string"

) then

__logerror

("removenotify error.param invalid."

)return

endif

(self.data[event_name]

== nil) then

return

endfor i,v in

ipairs

(self.data[event_name])do

if(v.callback == callback) then

v.enable =

false

return

endend

end

訊息觸發

function eventmessage:

notify

(event_name, value)

if event_name ==nil or

(self.data[event_name]

== nil) then

return

endlocal flag =

true

for i,v in

ipairs

(self.data[event_name])do

if(v.enable ==

true

) then

v.callback

(value, v.attachparam)

else

flag =

false

endend

if(flag ==

false

) then

for i,v in

ipairs

(self.data[event_name])do

if(v.enable ==

false

) then

table.

remove

(self.data[event_name]

, i)

endend

endend

監聽:

local function

refsh

(val,self)

print

("現在的狀態是"

..val)

endfunction

addnotify()

__eventmessage:

addnotify

("startgame"

, refsh,self)

end移除

function

removenotify()

__eventmessage:

removenotify

("startgame"

, refsh)

end觸發

local function

start()

__eventmessage:

notify

("startgame"

,"開始遊戲"

)end

Lua的物件導向寫法

2 例項 3 尾聲 最近閒的沒事玩 暗黑2 懷舊.哈哈哈哈哈哈 需要開8個遊戲一起操作,沒有工具太麻煩了.於是產生了寫個輔助工具的想法.工具需求當然要求小巧可愛 開發方便.又容易修改.所以選了c 和lua相互配合.機緣巧合vs商店找到乙個庫neolua.找到了用了一下確實不錯就開工了.工具寫好了.返...

Handler訊息機制的寫法

handler訊息機制的寫法 1.在主線程建立乙個handler物件 2.重寫handler物件的handlermessage方法 3.在子執行緒中建立乙個message物件用來攜帶子執行緒處理的結果。4.使用主線程建立的handler在子線中將message傳送到主線程 5.主線程中handler...

react事件的多種寫法

類裡面的函式,放在類的原型物件上,供例項物件呼叫 class person 一般方法 speak onclick 通過this這個例項物件獲取handleclick函式 此時handleclick是自己執行的,所以this指向undefined 定義箭頭函式this指向定義時的this,class ...