我正在编写一个Flash游戏,我制作了一些点(x和y位置),一些影片剪辑必须遵循。那些影片剪辑有一定的速度(他们现在制作5像素的步长)。当我想要水平或垂直移动它们时,一切都很好,我必须添加或删除这些剪辑的x或y的5个像素。但有时他们必须对角移动,现在这很复杂。
我在做什么:
var angle:Number = Math.atan2(nextPoint.y - this.y, nextPoint.x - this.x) * 180 / Math.PI;
var xstep:Number = Math.cos(angle) * this.speed;
var ystep:Number = Math.sqrt(Math.pow(this.speed, 2) - Math.pow(xstep, 2));
this.x += xstep;
this.y += ystep;
这只是代码的一小部分,但我认为这就是你所需要的。 基本上,这使我的movieclip做了一小步(this.speed(目前设置为5)像素)。
如果当前点和下一个点具有相同的y位置,则可以正常工作。当他们不这样做时,它不起作用。角度最初是正确的,但它会慢慢减小(而它应该保持不变)。我不知道这是不是以正确的方式计算的角度,还是它是x和y的步骤,但它是其中之一,我敢肯定。
答案 0 :(得分:2)
请改为尝试:
var angle:Number = Math.atan2(nextPoint.y - this.y, nextPoint.x - this.x);
var xstep:Number = Math.cos(angle) * this.speed;
var ystep:Number = Math.sin(angle) * this.speed;
由于cos
在弧度中的角度运算,因此您无需转换为度数。计算角度的y分量使用sin
,因此它应该类似于x。我无法对此进行测试,但ystep
可能会倒退,可能需要乘以-1
。