我正在制作一个 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;
我的问题非常类似于this one,这更好地解释了它,但不幸的是它是用 C# 编写的。
EDIT:这是工作代码,对于任何可能觉得有用的人:
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;
}
只需对代码进行少量更改,它似乎就可以工作:
http://jsfiddle.net/57hAk/11/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)