载入中...
搜索中...
未找到
事件模块
事件模块
脚本入口: eve.Event()
泵送平台事件,并用字符串消息队列在模块或线程之间传递通知。
基本用法
local events = eve.Event();
events.push("quest-complete", "intro");
local name = events.poll();
if (name == "quest-complete") showReward();
对象关系与调用时机
Event 同时承接 SDL 平台事件泵和简单字符串消息队列。平台输入由 pump() 收集;业务消息由 pushData() 写入并由 poll() / pollData() 取出。默认循环已泵送事件,游戏一般只消费队列。
目标导向指南
在系统之间发送一次性消息
生产者使用 pushData(name, data) 写入事件;消费者在 eve_update 中循环 poll() 或 pollData(),并用 getLastData() 读取最近消息的关联字符串。事件消费后即从队列移除,适合“任务完成”“切换关卡”而不是持久状态。
保持窗口响应
自定义主循环时每帧调用 pump();模块没有阻塞等待接口;无事件时继续下一帧。清空业务消息应由消费者持续 poll(),不要停住渲染线程。
常见问题
- 同一事件被多个系统竞争消费:指定唯一消费者,再转发领域状态。
- 把队列当状态存储:队列是一次性的;持久状态应放组件或游戏模型。
- 在渲染阶段消费事件:会造成帧内顺序不稳定,应在更新阶段完成。
API 快查
下列方法名来自当前 Squirrel 绑定;同一模块创建的辅助对象(例如 World、Body、Source)的方法也列在这里。
getLastData()、getName()、poll()、pollData()、pump()、pushData()
使用要点
- 模块对象和它创建的资源对象应保存在全局或实体状态中,不要在每帧重复创建。
- 带
update(dt)的系统应在eve_update调用;绘制方法应在eve_render调用。 - 参数约束、默认值和返回类型以对应模块头文件及
addFunc绑定为准;本文 API 快查与当前源码同步生成。
源码: src/modules/event/ 相关测试: 在 test/ 中搜索 event。