3
var diffx = (this.destination.x - pos.x), px = diffx/dist;
var diffy = (this.destination.y - pos.y), py = diffy/dist;
var angle = Math.atan2(diffy, diffx) - rot.z;
rot.set(0, 0, rot.z + angle/24);
一个对象指向我的鼠标指针。我使用上面的代码来计算以弧度为单位的角度,并在几帧中“动画”角度。但是,当angle
变量从正值变为负值(以PI弧度表示)时,它会一直顺时针转到新的光标位置(如红色所示)。但是,我想要的路径是直接进入新角度(绿色箭头)。角度动画与atan2
编辑:
这是我想出了,似乎工作。我能改善吗?
if(atan - this.lastAtan < -Math.PI)
atan += Math.PI * 2;
else if(atan - this.lastAtan > Math.PI)
atan -= Math.PI * 2;
this.lastAtan = atan;
var zrot = rot.z + (atan * 12 * Game.dt);
rot.set(0, 0, zrot % (Math.PI * 2));
适用于一次旋转,但在第二次旋转时做同样的事情。我假设我必须继续添加/减去2pi,但是我已经完成了很多旋转。 – John
您可以使用模运算符来避免重复的加/减 - http://stackoverflow.com/questions/16505559/how-can-i-use-modulo-operator-in-javascript。 –
谢谢,我有一些工作。我将它添加到OP,我可以简化它吗? – John