ゲームに Box2d を使用していますが、バグがあり、気が狂いそうです。状況を単純化して、正方形のプレイヤーが一連の正方形のタイルで構成された床の上を摩擦なく前後にスライドし、左右のキー (水平方向の力を加える) によって駆動されるようにしました。床全体を前後にスライドしてうまく機能します。
例外は... ときどき、プレーヤーは、(存在しない) 壁にぶつかるかのように、タイルの 1 つの端に突然固執します。移動していたのと同じ方向にさらに押すと失敗しますが、反対方向に一度後ろに押すとすぐに、スティッキングポイントを超えて前に押すことができます. 固着点は、タイルの端にあることを除いて、ランダムに見えます。左または右に移動中に発生します。
デバッグの目的で、前の 2 つの更新ティックの位置/速度の値を保持し、この停止が発生したときにそれらを出力します。例として、ここではプレーヤーが右に移動し、わずかに減速しています。pos2 は約 8.7 である必要がありますが、代わりに完全に停止します。
tick0: pos= 8.4636 vel= 7.1875
tick1: pos= 8.5816 vel= 7.0833
tick2: pos= 8.5816 vel= 0.0000
したがって、プレーヤーは 0.8 でタイルの幅は 1.0 であるため、プレーヤーは次のタイルに渡ろうとしているときに停止します (8.5816 + 0.8/2 = 8.9816)。実際、衝突メッセージが表示されます (衝突が発生したことに注意する以外は無視します)。右に移動するときは x.5816 (または -x.4184)、左に移動するときは x.4167 (または -x.5833) でのみ発生するようです。
壁にぶつかったようなものだと言いましたが、実際に壁にぶつかると数字は次のようになります。
tick0: pos0= 12.4131 vel2= 8.4375
tick1: pos1= 12.5555 vel1= 8.5417
tick2: pos2= 12.5850 vel0= 0.0000
そのため、最後のティックでさらに右に移動し、壁に接触します。
このようなものを見た人はいますか?この動作をどのように引き起こしている可能性があるかについての提案はありますか?