Theseus 模组文档
API 参考 / 事件系统

TickEvent


宿主主循环的每帧心跳。TickEvent.Pre 在本帧逻辑更新之前投递,TickEvent.Post 在其之后、渲染之前投递。二者都不可取消,宿主无论如何都要出帧。

实现核验:GlGameLoop 每帧构造新实例投递(new TickEvent.Pre(tickDelta) / new TickEvent.Post(tickDelta)),并不复用同一对象;但监听器仍不得缓存事件对象,需要的数据当场读出。

方法速览

方法用途
deltaSeconds()距上一帧的秒数(宿主实测帧间隔,已 clamp)

deltaSeconds()

java
public final double deltaSeconds();

行为:返回距上一帧的秒数。可用于帧率无关的累加(value += deltaSeconds() * rate),或做与帧率无关的平滑。宿主对帧间隔做了合理范围 clamp,倒带 / 暂停不会造成异常大值。

示例:

java
ctx.eventBus().subscribe(TickEvent.Pre.class, EventPriority.LOWEST, event -> {
    elapsedSeconds += event.deltaSeconds();
});

完整签名

java
public abstract class TickEvent extends Event {
    protected TickEvent(double deltaSeconds);
    public final double deltaSeconds();

    public static final class Pre extends TickEvent {
        public Pre(double deltaSeconds);
    }

    public static final class Post extends TickEvent {
        public Post(double deltaSeconds);
    }
}

线程:渲染 / 游戏主循环线程。

性能:每帧投递,监听器必须极轻——禁止分配大对象、禁止阻塞 IO。

稳定性:2.0 起冻结,2.x 内只增不破。