4

敵の船が指定されたポイントに向かって回転できるようにするJavaScriptゲームを作成しています。次に、それらの動きをそれらの角度から計算できます。次のローテーションのコードは、船がターゲットの下と右にある場合にのみ機能します。船が左側にある場合、船は約0度まで回転し、そこで揺れます。右上では、反時計回りに連続的に回転します。私はここで何を間違っているのですか?より良い方法について何か提案はありますか?

obj.angle %= 360;
// Calculate angle to target point
var targetAngle = Math.atan2(obj.mode.dest.y - obj.y, obj.mode.dest.x - obj.x) * (180 / Math.PI) + 90;
// Get the difference between the current angle and the target angle
var netAngle = Math.abs(obj.angle - targetAngle) % 360;
// Turn in the closest direction to the target
netAngle > 180 ? obj.angle += obj.shipType.turnSpeed : obj.angle -= obj.shipType.turnSpeed;
if(obj.angle < 0) obj.angle += 360;
if(obj.angle > 360) obj.angle -= 360;

私の質問はこれと非常によく似ています。これはそれをよりよく説明していますが、残念ながらC#にあります。

編集:これが便利だと思う人のための実用的なコードです:

obj.angle %= 360;
var targetAngle = Math.atan2(obj.mode.dest.y - obj.y, obj.mode.dest.x - obj.x) * (180 / Math.PI) + 90;
targetAngle = (targetAngle + 360) % 360;
if(obj.angle != targetAngle)
{
    var netAngle = (obj.angle - targetAngle + 360) % 360;
    var delta = Math.min(Math.abs(netAngle - 360), netAngle, obj.shipType.turnSpeed);
    var sign  = (netAngle - 180) >= 0 ? 1 : -1;
    obj.angle += sign * delta + 360;
    obj.angle %= 360;
}
4

1 に答える 1

2

コードにほとんど変更を加えることなく、機能しているように見えます。

http://jsfiddle.net/57hAk/11/

于 2012-08-06T06:54:41.977 に答える