注册事件
2026年6月8日大约 2 分钟
事件回调
超级宏提供两个事件注册函数:RegisterEvent(持久注册)和 RegisterOnceEvent(一次性注册)。当指定的事件发生时,黑兔会调用你注册的回调函数。
RegisterEvent — 持久注册
黑兔版本>=1.11.17
注册一个持久的事件回调,每次事件触发时都会执行。传入 nil 可清空该事件的回调。
void RegisterEvent(string 事件名, function 回调)
RegisterOnceEvent — 一次性注册
注册一个一次性的事件回调,事件触发一次后自动删除。相同事件名重复注册会覆盖上一次。传入 nil 可手动清空。
void RegisterOnceEvent(string 事件名, function 回调)
注意事项
- 推荐使用 RegisterOnceEvent ,因为 RegisterEvent 是全局的,有可能导致互相影响
- 每个事件只能注册一个回调(
RegisterEvent和RegisterOnceEvent是独立的),重复注册会覆盖之前的。 - 回调函数在主线程执行,执行过程中游戏会等待,不要在回调里写死循环或耗时操作。
- 回调执行出错时会打印警告日志,不会导致游戏崩溃。
支持的事件
SWING_RESULT — 平砍结束
当你完成一次平砍攻击时触发。适用于卡英勇打击、怒气监控、重置普攻计时器等场景。
回调参数:
| 参数值 | 含义 |
|---|---|
1 | 主手平砍结束 |
2 | 副手平砍结束 |
3 | 远程武器射击结束 |
SWING_RESULT_HAND1 — 主手平砍结束
主手平砍攻击结束时触发,无回调参数。
SWING_RESULT_HAND2 — 副手平砍结束
副手平砍攻击结束时触发,无回调参数。
SWING_RESULT_HAND3 — 远程武器射击结束
远程武器(弓/弩/枪/魔杖)射击结束时触发,无回调参数。
使用示例
示例 1:持久监控平砍
把以下代码放在黑兔超级宏编辑器中,保存后即可在游戏里看到平砍提示:
function OnSwing(hand)
if hand == 1 then
print("主手平砍结束")
elseif hand == 2 then
print("副手平砍结束")
elseif hand == 3 then
print("远程攻击结束")
end
end
RegisterEvent("SWING_RESULT", OnSwing)提示
上面的初始化代码只会执行一次(复制到编辑器并保存时)。之后每次平砍结束都会自动调用 OnSwing。
示例 2:细分事件监听
无需在回调里判断 hand 参数,直接监听特定部位:
RegisterOnceEvent("SWING_RESULT_HAND1", function()
print("主手平砍完毕")
-- 只关心主手,不需要判断参数
end)示例 3:一次性触发
只在下次平砍时执行一次,之后自动取消:
RegisterOnceEvent("SWING_RESULT", function(hand)
if hand == 1 then
print("主手平砍完毕,此回调只执行一次")
end
end)示例 4:清空回调
不需要事件监听时,传入 nil 即可取消:
RegisterEvent("SWING_RESULT", nil)
RegisterOnceEvent("SWING_RESULT", nil)