API 参考 / 事件系统
LaneInputEvent
「玩家按键 → 轨道」这一动作的事件。Pre 在按键被映射到轨道 / 判定之前投递;Post 在输入已被消费之后投递(观察点)。
方法速览
| 方法 | 用途 |
|---|---|
lane() | 轨道序号(从 0 起,已应用当前模式的轨道映射) |
keyCode() | 触发本次输入的按键码 |
musicTimeMs() | 本次输入对应的音乐时间 |
lane()
java
public int lane();行为:返回轨道序号(从 0 起),取的是应用当前模式 mapLane 之后的判定轨道。
keyCode()
java
public int keyCode();行为:返回触发本次输入的按键码。
musicTimeMs()
java
long musicTimeMs();行为:返回本次输入对应的音乐时间(毫秒)。
示例
java
ctx.eventBus().subscribe(LaneInputEvent.Pre.class, EventPriority.HIGHEST, event -> {
if (event.lane() == 3 && isLaneLocked()) {
// 只吞掉该轨道上的这次按键;同一按键映射到的其它轨道不受影响
event.setResult(EventResult.DENY);
}
});完整签名
java
public abstract class LaneInputEvent extends Event {
protected LaneInputEvent(boolean cancellable, int lane, int keyCode, long musicTimeMs);
public int lane();
public int keyCode();
public long musicTimeMs();
public static final class Pre extends LaneInputEvent {
public Pre(int lane, int keyCode, long musicTimeMs);
}
public static final class Post extends LaneInputEvent {
public Post(int lane, int keyCode, long musicTimeMs);
}
}行为核验:宿主逐轨道处理按键——对每个映射出的轨道先投递 Pre,isDenied() 为真时 continue(只跳过该轨道,不影响同一按键对其余轨道的映射,也不投递该轨道的 Post);否则执行判定,然后投递 Post。Pre 可取消,Post 不可取消。
线程:游玩场景的输入处理线程(游戏线程)。
稳定性:2.0 起冻结,2.x 内只增不破。