我的游戏单元有一个角度变量和一个targetAngle变量。这些变量范围从1到360度。
角度变量应始终朝targetAngle变量移动。
问题是,它不会以最短的方式发生。当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);
答案 0 :(得分:1)
您应该意识到360与0相同,因此您可以将角度与targetAngle以及targetAngle + 360进行比较并将其移动到最接近的方向(对于接近0和0的角度,请考虑-360) targetAngle接近360)
所以你的例子:
angle: 10
targetAngle: 350 (diff 340)
targetAngle+360: 710 (diff 700)
targetAngle-360: - 10 (diff 20)
角度最接近targetAngle-360,所以你会递减它,而不是递增它
注意:确保取差值的绝对值