This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
api:event:zh [2023/10/12 17:25] hfsr [概述] |
api:event:zh [2023/10/12 18:00] hfsr [通用事件处理函数] |
||
---|---|---|---|
Line 22: | Line 22: | ||
**返回值:**如果注册成功,数据类型为`number`,代表了事件id,可传递给`event.cancel`函数取消事件。如果函数已经注册过此类事件,将会返回`false`。 | **返回值:**如果注册成功,数据类型为`number`,代表了事件id,可传递给`event.cancel`函数取消事件。如果函数已经注册过此类事件,将会返回`false`。 | ||
- `event.ignore(event: string, callback: function): boolean` | - `event.ignore(event: string, callback: function): boolean` | ||
- | 注销一个先前注册的事件侦听器。 | + | 注销一个事件侦听器。 |
**event(事件)** - 需要注销的信号名称。\\ | **event(事件)** - 需要注销的信号名称。\\ | ||
**callback(回调函数)** - 之前注册到此事件的回调函数。\\ | **callback(回调函数)** - 之前注册到此事件的回调函数。\\ | ||
**返回值:**如果事件成功注销则返回`true`。如果指定的函数并未注册到此类事件则返回`false`。\\ | **返回值:**如果事件成功注销则返回`true`。如果指定的函数并未注册到此类事件则返回`false`。\\ | ||
- | //注意://事件侦听器在注销自身时可能会返回`false`,此时相当于调用 `event.ignore`,并向其传参侦听器和侦听器所注册的函数。 | + | //注意://事件侦听器返回`false`后将会被自动注销。相当于调用 `event.ignore`,并向其传递对应参数。 |
- `event.timer(interval: number, callback: function[, times: number]): number` | - `event.timer(interval: number, callback: function[, times: number]): number` | ||
开启一个新的定时器,在经过`interval`指定的时长后将会被触发。 | 开启一个新的定时器,在经过`interval`指定的时长后将会被触发。 | ||
**interval(触发间隔)** - 调用回调函数的间隔时长,单位为秒。可以为像0.05这样的小数。\\ | **interval(触发间隔)** - 调用回调函数的间隔时长,单位为秒。可以为像0.05这样的小数。\\ | ||
**callback(回调函数)** - 要调用的函数。\\ | **callback(回调函数)** - 要调用的函数。\\ | ||
- | **times(次数)** - 应调用函数的次数。如果省略则函数只会被调用一次。指定为`math.huge`可以无限次重复调用。\\ | + | **times(次数)** - 应调用的次数。如果省略则函数只会被调用一次。指定为`math.huge`可以无限次重复调用。\\ |
**返回值:**定时器id,可以随时用于取消定时器。\\ | **返回值:**定时器id,可以随时用于取消定时器。\\ | ||
- | //Note//: the timer resolution can vary. If the computer is idle and enters sleep mode, it will only be woken in a game tick, so the time the callback is called may be up to 0.05 seconds off. | + | //注意://定时器的精度可能会发生变化。如果电脑闲置并进入了休眠模式,则电脑只会每游戏刻唤醒一次。因此触发回调函数的时间点可能会偏差至多0.05秒。 |
- `event.cancel(timerId: number): boolean` | - `event.cancel(timerId: number): boolean` | ||
取消某个先前由`event.timer`函数创建的定时器。 | 取消某个先前由`event.timer`函数创建的定时器。 | ||
Line 44: | Line 44: | ||
**...** - 任意数量的参数,顺序需要与目标[[component:signals|信号]]所定义的相同。它们会被作为过滤器来筛选信号返回的额外参数,判断方式为是否完全相等。值可以为`nil`,这样将不会过滤此参数。\\ | **...** - 任意数量的参数,顺序需要与目标[[component:signals|信号]]所定义的相同。它们会被作为过滤器来筛选信号返回的额外参数,判断方式为是否完全相等。值可以为`nil`,这样将不会过滤此参数。\\ | ||
样例: | 样例: | ||
- | `touch`信号(在玩家点击二级或三级显示器时触发)带有如下参数:` screenX: number`(点击处的X坐标)、`screenY: number`(点击处的Y坐标)、`playerName: string`(进行点击的玩家姓名)。 | + | `touch`信号(在玩家点击二级或三级显示器时触发)带有如下参数:` screenX: number, screenY: number, playerName: string`(点击处的X、Y坐标,进行点击的玩家ID) |
若要仅拉取玩家"Steve"的点击,你需要使用: | 若要仅拉取玩家"Steve"的点击,你需要使用: | ||
`local _, x, y = event.pull("touch", nil, nil, "Steve")` | `local _, x, y = event.pull("touch", nil, nil, "Steve")` | ||
Line 115: | Line 115: | ||
===== 通用事件处理函数 ===== | ===== 通用事件处理函数 ===== | ||
- | 此处提供了一个较好的通用事件处理函数。此样例的主要功能是以`event.pull()`函数返回的事件ID作为回调函数列表的键,用元方法来处理未定义事件。请注意`event.pull`函数会让程序进入等待状态,直到出现可用事件。 | + | 此处提供了一个较好的通用事件处理函数。此样例中以`event.pull()`函数返回的事件ID作为回调函数列表的键,用元方法来处理未定义事件。请注意`event.pull`函数会让程序进入等待状态,直到出现可用事件。 |
```lua | ```lua | ||
Line 128: | Line 128: | ||
--存储所有事件处理函数的列表 | --存储所有事件处理函数的列表 | ||
- | --会返回占位假函数unknownEvent,以防无法匹配 | + | --会返回占位伪函数unknownEvent,以防无法匹配 |
local myEventHandlers = setmetatable({}, { __index = function() return unknownEvent end }) | local myEventHandlers = setmetatable({}, { __index = function() return unknownEvent end }) | ||
Line 152: | Line 152: | ||
- | 如果程序以驱动模式运作,你需要注册事件作为替代。可以将所有事件注册到像上面样例一样的全局事件处理函数,也可以将每个事件注册到对应的处理函数。如果你希望上面的样例在后台运行,`while running do`循环需要替换为类似下面的代码: | + | 如果程序以驱动模式运作,你需要注册事件而不是拉取事件。你可以将所有事件注册到像上面样例一样的全局事件处理函数,也可以将每个事件注册到对应的处理函数。如果你希望上面的样例在后台运行,`while running do`循环需要替换为类似下面的代码: |
```lua | ```lua | ||
event.listen("key_up", handleEvent) --注册handleEvent函数,使其在key_up事件发生时被调用,然后结束程序 | event.listen("key_up", handleEvent) --注册handleEvent函数,使其在key_up事件发生时被调用,然后结束程序 | ||
``` | ``` | ||
- | 也可以直接注册`myEventHandlers.key_up`,这样的话它会额外收到一个参数(事件名称)作为第一个参数。 | + | 也可以直接注册`myEventHandlers.key_up`,这样的话处理函数(`key_up`函数)会额外收到一个参数(事件名称)作为第一个参数。 |
目录 | 目录 | ||
----------- | ----------- | ||
{{page>api:contents:zh&noheader&noeditbutton&nouser&nofooter}} | {{page>api:contents:zh&noheader&noeditbutton&nouser&nofooter}} |