游戏事件
点击事件
点击触发npc
倒叙讲解:
- 提前设下游戏事件add,由点击npc事件EventCfg.onClicknpc调用该游戏事件,搜索EventCfg.onClicknpc即可
GameEvent.add(EventCfg.onClicknpc, function (actor,npcid,npcRet)
if npcid ~= 14 and npcid ~= 31 and npcid ~= 47 and npcid ~= 51 then
return
end
npcRet.ret = true
_openui(actor)
end, ChengHaoJinSheng)
- QF中,游戏事件push调用的游戏事件add,然后的点击钩子函数clicknpc,调用游戏事件push
local npcRet = { ret = false }
function clicknpc(actor, npcid)
--sendmsg(actor, ConstCfg.notice.own, '{"Msg":"' .. npcid .. '","Type":1}')
--release_print("aaa",getflagstatus(actor,100))
npcRet.ret = false
GameEvent.push(EventCfg.onClicknpc, actor, npcid, npcRet)
return npcRet.ret
end
以上点击npc打开弹窗就算结束,下面是点击弹窗内按钮功能:
- ui内按钮触发,调用的onbtnclick函数,传参数升级称号,搜索onbtnclick
<Button|x=373.5|y=296.5|color=255|mimg=public/chxt/002.png|size=18|pimg=public/chxt/002.png|nimg=public/chxt/001.png|link=@onbtnclick,升级称号>]]
- QF中onbtnclick函数调用点击事件dispatch
function onbtnclick(actor, msgId, ...)
ClickEvent.dispatch(actor, msgId, ...)
end
- 按钮点击事件dispatch函数中,执行了dispatch_handler数组内的函数,所以需要dispatch_handler内先有函数,下方第二个函数按钮注册事件就是往dispatch_handler送函数的,搜索ClickEvent.RegisterMsg
function ClickEvent.dispatch(actor, msgID, ...)
local target = dispatch_handler[msgID]
if not target then return end
--target(actor, ...)
local result, errInfo = pcall(target, actor,...)
if not result then
local err = "点击事件发生错误:事件名="..msgID
release_print(err, errInfo)
end
end
function ClickEvent.RegisterMsg(msgId, target)
dispatch_handler[msgId] = target
end
- 游戏注册事件如下,逻辑业务代码在_start函数中
ClickEvent.RegisterMsg("升级称号", _start)
npc事件总结:
点击npc,打开弹窗:
- 提前添加游戏事件GameEvent.add,游戏事件内写业务代码(打开弹窗ui页面)
- 由钩子函数clicknpc调用提前添加的游戏事件。
除了框架外加GameEvent.add代码和业务函数代码
点击弹窗内按钮:
- 提前弹窗内调用onbtnclick函数
- onbtnclick函数调用ClickEvent.dispatch函数点击事件
- ClickEvent.dispatch函数内调用了dispatch_handler数组内函数
- ClickEvent.RegisterMsg函数往dispatch_handler数组内加函数
除了框架外加ClickEvent.RegisterMsg代码和调用onbtnclick函数