初速・減衰・停止の数値
このゲームの手触りは、4つの数字でほぼ説明できます。初速の式、密度差、減衰、そして停止判定の0.5秒です。
01初速の式
発射時の速度は、コード上では次のように書かれています。linearVelocity = 方向ベクトル × (vectorRate + 0.165 × (force + buffForce − 1))。vectorRate は 10 です。
つまり force が 1 のときは 10、force が 10 のときは 10 + 0.165 × 9 = 11.485。force が 2 倍になっても速度は 2 倍にはならず、上がり幅は 1 レベルあたり 0.165 ずつです。強化の効きが小さいのは、この式が理由です。
| force | 初速 | force 1 との差 |
|---|---|---|
| 1 | 10.000 | — |
| 2 | 10.165 | +0.165 |
| 5 | 10.660 | +0.660 |
| 10 | 11.485 | +1.485 |
| 20 | 13.135 | +3.135 |
02重さの差
ストライカーの密度は 10、パックの密度は 5。同じ半径ならストライカーのほうが重い、という設定です(実際の半径は 25 と 18 で、ストライカーのほうが大きい)。重いものが軽いものに当たると、軽いほうが大きく飛びます。これがカロムの「はじく」感覚の正体です。
減衰はストライカーが 8960、パックが 7777。数値が大きいほど止まりやすい、という向きの値です。ストライカーのほうが早く止まり、パックは少し長く転がります。
03回転が乗る
衝突のあと、接線方向の力に応じて角速度が加わります(applyAngularImpulse(5000 × 接線インパルス))。正面から当てたつもりでも、少しでもずれると回転が乗り、予想より曲がります。
「まっすぐ引いて、まっすぐ離す」が基本なのは、この回転のせいです。斜めに引くと、球は斜めに飛ぶうえに回転もして、二重にずれます。
04止まったと判定されるまで
球が止まったかどうかは、最後の接触から 0.5 秒後に判定されます。見た目上は止まって見えても、判定が下りるまで次の手は打てません。逆に、0.5 秒以内に再び動き出せば「まだ動いている」と扱われます。
この 0.5 秒は、焦って次の操作をしても無駄になる時間です。球が完全に止まるのを見てから、次の位置を決め始めるのが結果的に速いです。