载入中...
搜索中...
未找到
事件模块

事件模块

脚本入口: 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 绑定;同一模块创建的辅助对象(例如 WorldBodySource)的方法也列在这里。

  • getLastData()getName()poll()pollData()pump()pushData()

使用要点

  • 模块对象和它创建的资源对象应保存在全局或实体状态中,不要在每帧重复创建。
  • update(dt) 的系统应在 eve_update 调用;绘制方法应在 eve_render 调用。
  • 参数约束、默认值和返回类型以对应模块头文件及 addFunc 绑定为准;本文 API 快查与当前源码同步生成。

源码: src/modules/event/ 相关测试:test/ 中搜索 event