LaneView
轨道只读视图(真轨道与假轨道同一套口径)。供模组在 FilterFrame#context().lanes() 中读取,用于基于轨道位置/形状的后处理(如在指定轨道左侧/右侧套滤镜条带),也可用于提示类 HUD 定位按键标签。每次 lanes() 调用得到的字段值即该快照时刻的值。
方法速览
| 方法 | 用途 |
|---|---|
id() | 轨道 id(lane_N / fake_{id}) |
x() / y() | 未旋转布局矩形左上角(画布坐标) |
width() / height() | 每轨宽 / 轨道高 |
angle() | 旋转角(弧度,顺时针为正) |
isFake() | 是否假轨道 |
keyLabel() | 按键显示名(假轨为 null) |
heightExtension() | 高度延伸量 |
skew() / skewAnchorY() | 斜切系数 / 零偏移锚点 y |
arcBend() / arcCenterY() | 弧线有符号幅度 / 弧心 y |
alpha() / keyIndicatorAlpha() | 背景透明度 / 键框透明度 |
scaleX() / scaleY() | 缩放因子 |
rotationPivotX() / rotationPivotY() | 旋转圆心(画布坐标) |
id()
String id();行为:真轨道形如 "lane_0".."lane_{n-1}";假轨道形如 "fake_{id}"(id 来自宿主 FakeTrackRenderer.getId())。示例:
boolean isLane0 = "lane_0".equals(lane.id());x()
double x();行为:未旋转布局矩形左上角 X,画布坐标(虚拟 1280×720 空间),已计入轨道区整体平移(track_move / 模组 setTrackOffset);contentScale 由宿主在画布层统一施加,不烘焙进返回值。每轨 lane_move 偏移与形变也不烘焙进矩形。
示例:
double left = lane.x();y()
double y();行为:未旋转布局矩形左上角 Y(画布坐标,已计入轨道区整体平移)。真轨未写姿态时以世界原点为中心、y 为轨道体顶部(约 -judgeLineY);假轨为背景顶边。
示例:
double top = lane.y();width()
double width();行为:单条轨道宽(真轨与假轨同为 TrackRenderer.getTrackWidth())。
示例:
double centerX = lane.x() + lane.width() / 2;height()
double height();行为:真轨 = 轨道体实际高度(judgeLineY + heightExtension,底边即判定线,默认 413.5);假轨 = 该假轨背景高(自身顶边到判定线)。注意与 heightExtension() 不是同一个量。
示例:
double bottom = lane.y() + lane.height();angle()
double angle();行为:旋转角度(弧度,0 = 竖直,顺时针为正)。真轨取谱面额外内容 lane_rotate 的当前角度(未设置时为 0);假轨取 FakeTrackRenderer.getRotation()。
示例:
double deg = Math.toDegrees(lane.angle());isFake()
boolean isFake();行为:是否为假轨道。假轨道来自 ExtraContentRenderer 系统,不参与判定,仅装饰。示例:
if (lane.isFake()) return;keyLabel()
String keyLabel();行为:该轨道对应物理按键的短显示名(≤3 字符,如 "J"、"S"、";"),用于提示类 HUD;键位解析失败或假轨道返回 null,调用方需判空。
示例:
String key = lane.keyLabel();
if (key != null) { /* 画键位标签 */ }heightExtension()
double heightExtension();行为:高度延伸量(px)。真轨 = 每帧生效的 lane_height(含 auto 结果);假轨 = fake_track_height 显式高度。表示「轨道顶端额外延伸了多少」。
示例:
double ext = lane.heightExtension();skew()
double skew();行为:斜切系数,钳在 ±1(0 = 未斜切);来源 lane_skew / fake_track_skew。示例:
double k = lane.skew();skewAnchorY()
double skewAnchorY();行为:斜切零偏移锚点 y(画布坐标,该高度处横向偏移为 0)。示例:
double ay = lane.skewAnchorY();arcBend()
double arcBend();行为:弧线有符号幅度(px,>0 右凸 / <0 左凸,钳 ±300);来源 lane_arc / fake_track_arc。示例:
double bend = lane.arcBend();arcCenterY()
double arcCenterY();行为:弧心 y(画布坐标,该高度处弧线零偏移且切线水平)。示例:
double cy = lane.arcCenterY();alpha()
double alpha();行为:背景 / 分隔线透明度 0.0~1.0(真轨 lane_alpha、假轨 fake_track_alpha 的背景半边)。示例:
double a = lane.alpha();keyIndicatorAlpha()
double keyIndicatorAlpha();行为:快捷键框透明度 0.0~1.0,与 alpha() 独立可分别控制。示例:
double ka = lane.keyIndicatorAlpha();scaleX()
double scaleX();行为:X 缩放因子(≥0.01,1 = 原大小);来源 lane_scale / 假轨 fake_track_move 的缩放分量。示例:
double sx = lane.scaleX();scaleY()
double scaleY();行为:Y 缩放因子(≥0.01,1 = 原大小)。示例:
double sy = lane.scaleY();rotationPivotX()
double rotationPivotX();行为:旋转圆心 X(画布坐标,已计入轨道区整体平移)。真轨取 lane_rotate 的圆心档位(判定线中点 / 背景几何中心);假轨取 fake_track_rotate 的 pivot。
口径差提示:GameStateAccess.laneRotationPivot(int) 含每轨偏移 lane_move、不含轨道区整体平移 track_move,本方法则计入 trackOffset,故 trackOffset != 0 时二者相差一个平移量。
示例:
double px = lane.rotationPivotX();rotationPivotY()
double rotationPivotY();行为:旋转圆心 Y(画布坐标),口径提示同 rotationPivotX()。示例:
double py = lane.rotationPivotY();完整签名
public interface LaneView {
String id();
double x();
double y();
double width();
double height();
double angle();
boolean isFake();
String keyLabel();
double heightExtension();
double skew();
double skewAnchorY();
double arcBend();
double arcCenterY();
double alpha();
double keyIndicatorAlpha();
double scaleX();
double scaleY();
double rotationPivotX();
double rotationPivotY();
}线程:源码未声明额外线程约束。
性能:lanes() 的整份列表在上下文快照构造期生成(不可变包装),不要每帧调用后长期持有;单个 LaneView 实例为字段固定的快照,读取无额外开销。
稳定性:2.0 起冻结:2.x 内只增不破。 / 的几何只读量为纯增字段。