TAP 音符 - 点击音符
概述
TAP 是最基础的音符类型,玩家需要在音符到达判定线时进行点击操作。
技术规格
| 属性 | 值 |
|---|---|
| 类型值 | 0 |
| ZNear | 0 |
| ZFar | 25 |
| Java 枚举 | NoteType.TAP |
JSON 格式
{
"noteType": 0,
"beat": 4.0,
"pos": [0, 0, 0],
"scale": [1, 1, 1],
"rotation": [0, 0, 0],
"holdGroup": -1
}
字段说明
| 字段 | 类型 | 必需 | 说明 |
|---|---|---|---|
| noteType | int | 是 | 固定为 0 |
| beat | double | 是 | 音符出现的拍数位置 |
| pos | double[3] | 是 | [X, Y, Z] 坐标(数组格式) |
| scale | float[3] | 是 | [X, Y, Z] 缩放(数组格式) |
| rotation | float[3] | 是 | [X, Y, Z] 旋转角度(数组格式) |
| holdGroup | int | 是 | 固定为 -1(TAP 不参与长押组) |
判定系统
判定窗口
| 判定类型 | 时间窗口 | 说明 |
|---|---|---|
| PERFECT | ±110ms | 完美命中 |
| FAST_GREAT | 110ms ~ 220ms | 偏快的大好 |
| LATE_GREAT | -220ms ~ -110ms | 偏慢的大好 |
| MISS | >220ms 或 <-220ms | 未命中 |
容差值
- 空间容差: 0.15(
TOLERATE_TAP_LOOK) - 判定逻辑: 使用光线追踪检测玩家点击是否命中音符碰撞箱
判定逻辑
- 位置计算: 音符根据轨道变换计算实际世界坐标
- 碰撞检测: 检测玩家点击是否在音符碰撞箱内
- 时间判定: 根据点击时间与音符目标时间的差值确定判定结果
- 延迟补偿: 系统自动进行延迟补偿
碰撞箱计算
音符的碰撞箱基于以下因素计算:
- 音符自身的缩放
- 轨道的缩放
- 音符的旋转角度
- 轨道的旋转角度
最小碰撞箱尺寸为 1.0 格(半边长 0.5)
使用示例
基本 TAP 音符
{
"noteType": 0,
"beat": 4.0,
"pos": [0, 0, 0],
"scale": [1, 1, 1],
"rotation": [0, 0, 0],
"holdGroup": -1
}
多轨道 TAP 音符
{
"noteType": 0,
"beat": 8.0,
"pos": [2, 0, 0],
"scale": [1.5, 1.5, 1.5],
"rotation": [0, 0, 0],
"holdGroup": -1
}
注意事项
- TAP 音符不参与长押组,
holdGroup必须为 -1 - 音符的
beat值应该与 BPM 事件配合使用 - 位置坐标相对于轨道的初始位置
- 旋转会影响碰撞箱大小和判定难度