1

我的游戏单位有一个角度变量和一个 targetAngle 变量。这些变量的范围从 1 到 360 度。

角度变量应始终向目标角度变量移动。

问题是,它不会以最短的方式发生。当 targetAngle 是 350 度,而当前角度只有 10 度时,变量应该只移动 20 度,而不是像我现在那样增加 340 度。

如何使角度变量以最短的方式向 targetAngle 变量移动?

现场演示:http: //jsfiddle.net/zNsbc/

var angle = 10;
var targetAngle = 350;

setInterval(function() {

    if ( angle > targetAngle ) {
        angle--;
    }
    else if ( angle < targetAngle ) {
        angle++;
    }    

    $("#angle").text(angle);

}, 10);
4

1 回答 1

1

您应该意识到 360 与 0 相同,因此您可以将角度与 targetAngle 以及 targetAngle+360 进行比较,并将其移动到最接近的方向(考虑 -360 以及接近 0 的角度和接近的 targetAngle 360)

所以你的例子:

angle:            10
targetAngle:      350 (diff 340)
targetAngle+360:  710 (diff 700)
targetAngle-360: - 10 (diff  20)

角度最接近 targetAngle-360,所以你会减少它,而不是增加它

注意:确保取差值的绝对值

于 2012-06-19T15:40:39.327 回答