スムーズな回転に関する問題の解決策を探しました。私はそれを 99% 動作させることができますが、私をいじり続ける小さな問題が 1 つあります。ターゲットが大幅に変化する場合を除いて、回転は正常に機能します。基本的な考え方は、ボールとプレーヤーがいて、プレーヤーがボールに接触すると、ボールの方向と速度を変えるというものです。プレーヤーはボールを正しく追跡しますが、ボールに接触するか、ボールの位置がリセットされると、角度間のデルタが 45 度を超えると、プレーヤーは即座にボールにジャンプします。ここに私が部分的に働いているコードがあります。事前に助けてくれてありがとう。
var newFacing = Math.atan2(theBall.y-player.y,theBall.x-player.x);
var diff = (Math.abs(newFacing) - Math.abs(player.facing));
if (diff < Math.PI*0.1 && diff > -Math.PI*0.1){
player.facing = newFacing;
}else if (diff > Math.PI) {
player.facing -= Math.PI*0.1;
} else {
player.facing += Math.PI*0.1;
}
if (player.facing > Math.PI) {
player.facing -= Math.PI*2;
} else if (player.facing < -Math.PI) {
player.facing += Math.PI*2;
}
更新: || を変更しました。&& に追加し、PI ラジアンを上回ったり下回ったりしないようにする条件を追加しました。いくつかの角度で奇妙な回転の問題がまだいくつかあります。たとえば、ボールがプレーヤーの下を通過した場合、論理的な反時計回りではなく、時計回りに回転して追従します。プレーヤーは、ボールを再び追跡する前に 360 度フル回転することがあります。それを追跡しないと、どのような条件がこれを引き起こしているのかわかりません。