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 内只增不破。