Actionscript 3 AS3:基于旋转移动随机生成的对象

Actionscript 3 AS3:基于旋转移动随机生成的对象,actionscript-3,rotation,Actionscript 3,Rotation,制作一款船上游戏,因为我非常有创意。。除此之外,我还有一个问题。我有一个功能,可以根据我的飞船的旋转来发射子弹。。它在创建时使用以下代码: var b = new Bullet ; b.x = x; b.y = y; b.rotation = rotation; parent.addChild(b); bullets.push(b); score -= 50; tr

制作一款船上游戏,因为我非常有创意。。除此之外,我还有一个问题。我有一个功能,可以根据我的飞船的旋转来发射子弹。。它在创建时使用以下代码:

        var b = new Bullet  ;
        b.x = x;
        b.y = y;
        b.rotation = rotation;
        parent.addChild(b);
        bullets.push(b);
        score -=  50;
        trace(enemybullets[30].x + "," + enemybullets[30].y);
上面的代码是在我的船类,所以我可以很容易地使子弹实现正确的旋转。 并不断更新其在bullet类中的位置:

        x += Math.cos(rotation / 180 * Math.PI) * speed;
        y += Math.sin(rotation / 180 * Math.PI) * speed;
所以一切都很顺利。但我有另一个类,EnemyBullet,它随机生成并使用类似的代码来设置它的方向和移动。在我的船舱里:

        var eb = new EnemyBullet ;
        eb.x = (Math.random() * 550) - 550;
        //trace("eb.x is " + eb.x)
        eb.y = (Math.random() * 400) - 400;
        //trace("eb.y is " + eb.y);
        var a1 = eb.y - y;
        var b1 = eb.x - x;
        var radians1 = Math.atan2(a1,b1);
        var degrees1 = radians1 / Math.PI / 180;
        eb.rotation = degrees1;
        if (enemybullets.length < 50)
        {
            parent.addChild(eb);
            enemybullets.push(eb);
        }
我已经设置了一个跟踪来跟踪我的一颗子弹的去向,因为它们肯定不会出现在我的屏幕上。。以下是我跟踪的结果:

x: 121.55, y:-162.05
x: 1197.05, y:-162.05
x: 1842.35, y:-162.05
x: 2368.15, y:-162.05
x: 2547.4, y:-162.05
x: 2702.75, y:-162.05
x: 2882, y:-162.05
我推测旋转因此总是水平的,但我的一生看不出为什么?有人能给我一个答案吗?假设它足够简单,因为我用来设置旋转的代码与我用来将movieclip转向鼠标的代码相同

有什么想法吗


助教

从弧度到度的转换包含一个错误:

var degrees1 = radians1 / Math.PI / 180;
应该是:

var degrees1 = radians1 / Math.PI * 180;
或者让它更容易理解:

var degrees1 = 180 * radians1 / Math.PI;

在您的情况下,degrees1可能是接近0的值;所以运动总是水平的。

这给了我与我所需要的相反的旋转——没关系,从旋转中取180,一切都很好。你知道为什么弧度-度转换对我的鼠标旋转脚本有效,而不是在这个脚本中吗?干杯我不知道,我会先看看鼠标旋转脚本的源码。也许在这个例子中,将弧度转换为度的计算是正确的。澄清我的答案:乘法和除法具有相同的运算符优先级;计算从左到右进行。在您的例子中,radians1首先除以Math.PI,然后将结果除以180(使值更小)。
var degrees1 = 180 * radians1 / Math.PI;