API 参考 / spi 包:音符与判定 SPI
JudgeSink
想先跑起来?
这一页是签名与行为参考。自主判定时把结果交回宿主。直接做一遍:教程 · 添加新音符类型。
判定结果收集器,定义对象用它产出一条判定。标注为函数式接口,二参版本可用 lambda 实现。
两条路径的语义不同:
onJudge(时间窗口判定路径):宿主只取第一次非null的kind作为本次判定的等级,judgeTime与note参数被忽略,且不改变是否命中。onJudgeTick(接管路径):只有三参版本生效(宿主按note引用定位音符);二参产出的条目因无法定位音符而被丢弃。
方法速览
| 方法 | 用途 |
|---|---|
accept(JudgmentKindDefinition, long) | 产出判定等级(onJudge 路径使用) |
accept(JudgmentKindDefinition, long, NoteView) | 对指定音符产出判定(onJudgeTick 路径必须用此版本) |
accept(JudgmentKindDefinition kind, long judgeTime)
签名:
java
void accept(JudgmentKindDefinition kind, long judgeTime);行为:产出一条以"当前音符"为对象的判定。kind 为判定等级定义(如 seecmd:perfect),judgeTime 为判定时间(毫秒)。在 onJudgeTick 路径下该条目被宿主忽略;在 onJudge 路径下 kind 生效、judgeTime 被忽略。kind 为 null 时被忽略。
示例:
java
sink.accept(myKind, input.judgeTime());accept(JudgmentKindDefinition kind, long judgeTime, NoteView note)
签名:
java
void accept(JudgmentKindDefinition kind, long judgeTime, NoteView note);行为:产出一条针对指定音符的判定,用于 onJudgeTick:一次回调可对多个音符分别产出。note 必须是 ctx.notes() 返回的同一实例(宿主按引用身份映射),否则该条被丢弃;kind 为 null 也丢弃。默认实现委托给二参版本(便于宿主按"当前音符"绑定语义复用)。
示例:
java
sink.accept(myKind, timeMs, note); // note 来自 ctx.notes()完整签名
java
@FunctionalInterface
public interface JudgeSink {
void accept(JudgmentKindDefinition kind, long judgeTime);
default void accept(JudgmentKindDefinition kind, long judgeTime, NoteView note);
}线程:源码未声明额外线程约束;宿主在判定回调内同步使用,收集结果后统一消费,sink 不得跨帧持有。
生命周期阶段:运行期判定回调内使用。
稳定性:2.0 起冻结:2.x 内只增不破(禁止删签名/改签名/改语义)。