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

TrackRenderEvent


宿主在轨道渲染器的渲染入口 / 出口各投递一次。Pre 在轨道与音符绘制之前(模组内容画在轨道之下),Post 在之后(画在轨道之上)。它比 RenderEvent 的 RenderLayer.NOTES 更细:可以精确画在「轨道与音符之下 / 之上」,不必与 NOTES 层的其它内容争顺序。

方法速览

方法用途
context()渲染上下文(层固定为 NOTES)
musicTimeMs()当前谱面时间(毫秒)
scrollSpeed()当前下落速度倍率
visibleNoteCount()本帧可见音符数

context()

java
public final RenderContext context();

行为:返回渲染上下文,其层固定绑定为 RenderLayer.NOTES(轨道渲染发生在该层内部)。只在回调期间有效,不得缓存。

musicTimeMs()

java
public final long musicTimeMs();

行为:返回当前谱面时间(毫秒)。

scrollSpeed()

java
public final double scrollSpeed();

行为:返回当前下落速度倍率,可用于让自绘内容与音符滚动速度一致。

visibleNoteCount()

java
public final int visibleNoteCount();

行为:返回本帧可见音符数量(只读观察值),可用于性能自适应。

示例

java
ctx.eventBus().subscribe(TrackRenderEvent.Post.class, event -> {
    RenderCanvas canvas = event.context().canvas();
    canvas.setAlpha(0.35);
    canvas.drawRect(0, 0, event.context().width(), 2);
});

完整签名

java
public abstract class TrackRenderEvent extends Event {
    protected TrackRenderEvent(RenderContext context, long musicTimeMs,
                               double scrollSpeed, int visibleNoteCount);
    public final RenderContext context();
    public final long musicTimeMs();
    public final double scrollSpeed();
    public final int visibleNoteCount();

    public static final class Pre extends TrackRenderEvent {
        public Pre(RenderContext context, long musicTimeMs, double scrollSpeed, int visibleNoteCount);
    }

    public static final class Post extends TrackRenderEvent {
        public Post(RenderContext context, long musicTimeMs, double scrollSpeed, int visibleNoteCount);
    }
}

行为核验:只在游玩场景投递——轨道渲染器也被资源预览等场景复用,那些场景不投递本事件,监听器不得假设「每帧必到」。

性能:每帧 2 次,与 RenderEvent 同级的轻量约束。

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