对应源文件: event.lua, ui_main.lua
MiniExtend Event 的前身是 ScriptSupportEvent
,但更便于使用,支持 MiniExtend Object 。
registerEvent(eventname, callback, [, uiid])
函数监听游戏事件,在 eventname
所描述的事件发生时,回调 callback
。
返回描述事件监听的 Register
表,用于取消事件监听。
如果 eventname
所描述的事件为 UI 事件,需要指定 uiid
需要监听的 UI 界面 id 。
监听 UI 事件会发生预绑定,常规流程(在第 0 帧和 ui_main
脚本前)不会真的监听事件,而是将信息存储在返回的 Register
表中(不含 id
值,暂存了临时值)。
在对应的 ui_main
脚本执行后会完成绑定并完成 Register
表(移除临时值,赋值 id
),在中途修改返回的 Register
可能导致错误。
该函数是 MiniExtend Event 的核心。
该函数的原型为 ScriptSupportEvent:registerEvent(msgStr, func)
。
eventname
:{string}
callback
:{function}
uiid
:{string | nil}
string
类型,表示要监听的 UI 界面 id 。nil
。uiid
所指 UI 界面发生的事件,其它 UI 界面发生的事件不会被监听,解决方法是对每个需要监听的 UI 界面使用不同的 uiid
参数调用该函数。 以上参数都会被检查,如果参数不正确则会报错。
param
,存储着该事件发生时的一些信息。 param
就是 ScriptSupportEvent:registerEvent()
回调函数传递的参数,详见假 wiki 。param
还必包含一个 register
,表示事件监听对应的 Register
表。 objid
的值为 param["eventobjd"]
,在回调结束后会恢复 objid
的值。 cancelRegisterEvent(register)
函数register
描述的事件监听。 register
:{table<Register>}
描述事件监听的 Register
表。 下文将事件名简称 eventname
,原始事件名称为 msgStr
。
需要使用 msgStr
作为参数调用 API ,但 MiniExtend 提供了更简短,可读性更高的自定义事件,于是就有了 eventname
,它作为调用 registerEvent()
时实际传入的参数。
既可以使用 MiniExtend 自定义事件名,也可以使用 API 事件名。
MiniExtend 自定义事件名在 event.lua 中的 CustomEvents
(局部变量) 中定义。
如果 eventname
以 "$"
开头,则认为其为 MiniExtend 自定义事件名,否则为 API 事件名。
如果为 MiniExtend 自定义事件名,则 msgStr = CustomEvents[eventname];
。
否则对于 API 事件, msgStr = eventname;
。
以下忽略了 "$"
前缀:
ui.onShow
: UI 界面显示事件,对应 [[UI.Show]]
。 ui.onHide
: UI 界面隐藏事件,对应 [[UI.Show]]
。 ui.onPress
: 按钮按下事件,对应 [[UI.Show]]
。 ui.onClick
: 按钮点击事件,对应 [[UI.Show]]
。 ui.onLostFocus
: 输入框失去焦点事件,对应 [[UI.Show]]
。 你会发现这些自定义事件名描述的都是 UI 事件,实际上通常通过 MiniExtend UI 监听这些事件。
注: 点击 = 按下 + 释放(目前无法监听该事件),按下事件不是延续性事件,只会在玩家开始按下的那一帧触发。
Register
表Register
表是 registerEvent()
的返回值,用于作为 cancelRegisterEvent()
的参数来取消事件监听。
注意 Register
表是 MiniExtend 理论中的一个表,_GScriptFenv_["&Register"]
为 nil
。
不要修改 Register
表的值,仅将整个表作为参数调用 cancelRegisterEvent()
,以下内容只是为了方便开发者
id
:{integer}
表示事件监听的 id。 uiId
:{string | nil}
如果是 UI 事件则为事件监听所属 UI 界面,否则为 nil
。 msgStr
:{string}
API 事件名。 以下值是内部使用的临时值,在预绑定期间才会存在。
callback
:{function}
回调的函数。 eventName
:{string}
事件名,即调用 registerEvent()
时传递的 eventname
参数。