javascript - 逐渐旋转一个物体以面对一个点?

标签 javascript jquery canvas rotation

我正在制作一个 javascript 游戏,我希望敌舰能够向指定点旋转。然后可以从他们的 Angular 计算他们的运动。以下旋转代码仅在船舶位于其目标下方和右侧时才有效。如果船在左边,它会旋转到 ~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# 中。

编辑:这是工作代码,对于可能觉得它有用的任何人:

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/

关于javascript - 逐渐旋转一个物体以面对一个点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11821013/

相关文章:

javascript - "Sorry, we have no imagery here"错误

javascript - 将 Grails 参数传递给 Javascript

jquery - 如何在窗口大小调整时实现平滑的字体大小变化?

javascript - html5 Canvas 图像落后于其他绘制的对象

javascript - 如何保存 html Canvas 然后在不丢失形状的情况下重新加载它?

javascript - fabric.js - 在鼠标移动时结束自由绘图模式

javascript - 在 Javascript 中使用连字符获取元素

javascript - 如何在具有按钮元素的情况下在 "show more"和 "show less"之间切换?

javascript - 无法限制用户输入超过 8 个字符

javascript - div下无法添加按钮