静止時速度のアーティファクト修正
このページでは、ブロック上静止時に発生していた 1.57 m/s の誤表示問題の解決経緯を解説します。
📊 地面静止速度修正インフォボックス
| 項目 | 従来の旧実装 (v1.0.0) | 最新の実装 (v1.1.0+) |
|---|---|---|
| 物理計算方式 | 独自の座標差分 ($\Delta p = p_t - p_{t-1}$) | バニラ Entity.getKnownSpeed() API |
| 静止時の速度問題 | 重力リセットにより $1.57\text{ m/s}$ と誤表示 | 静止時にブレなく $0.00\text{ b/s}$ を表示 |
| 接地判定 | 簡易的なブロック衝突判定 | Minecraft ネイティブの速度ベクトル管理 |
| 精度 | 誤差や丸めエラーが発生しやすい | バニラ物理演算と 100% 一致する高精度 |
🛠 問題の分析と解決策
従来の静止時アーティファクト
初期リリース (v1.0.0) では、連続するフレーム間の座標差分から速度を計算していたため、地面に静止している際も Minecraft が下向き速度 ($v_y \approx -0.0784$) をリセットし続け、移動として誤表示される ($1.57\text{ m/s}$) 問題がありました。
解決策:ネイティブ getKnownSpeed() の統合
v1.1.0 以降、Speedometer は独自の座標差分計算を廃止し、Minecraft ネイティブの Entity.getKnownSpeed() API を採用しました:
java
Vec3 knownSpeed = entity.getKnownSpeed();静止しているプレイヤーは正確に $(0.00, 0.00, 0.00)$ を返し、クリーンな $0.00\text{ b/s}$ となります。
