0

我正在使用 AS2,并且我有一个人可以动态构建的火车。用户单击舞台上的对象并创建副本。当用户单击并将该副本拖动到另一个对象中时,它会捕捉到目标对象的右侧,现在创建或添加数组。所以用户基本上可以用多少辆汽车(如果你愿意,也可以用孩子)来建造一列火车。

我添加的一项功能是,当用户单击并释放父项时,整个火车的坐标没有变化,_x整个_y火车将知道排队并指向新的方向。因此,如果他们都排成一列并指向 3 点钟位置,并且用户单击父级,则父级将指向 6 点钟位置,子级将全部排成 12 点钟位置并且所有指向到六人。如果他的用户继续点击整个火车将继续旋转。

这是我正在使用的代码(希望它足够了):

function rotate(_index,_angle):Void
{
    for(var _i in _linkArray[_index])
    {
        var _mcy:Number    = this[_linkArray[_index][_i]]._y;
        var _mcx:Number    = this[_linkArray[_index][_i]]._x;
        var _degree:Number = Math.atan2(_mcy,_mcx)*(180/Math.PI) + _angle;
        /* if not the first element line up and rotate */ 
        if(_i != 0)
        {
            this[_linkArra[_index][_i]._rotation += _degree;
        }
    }
}

希望有足够的信息。

编辑

我想尝试澄清我想要实现的目标。我没有例子,但为了更好地解释。库中有一个名为“railcar”的影片剪辑。当 SWF 启动时,“railcar”被附加到舞台上,该对象现在将成为创建无限数量副本的主对象。此处的最终目标是用户将使用这些副本来构建训练辅助工具。因此,如果用户想要开始构建该火车,他们将复制一个并将其拖放到另一个对象的顶部,这两个对象现在链接在一起。用户可以这样做并构建他们想要的火车。

建造火车时,所有车厢将堆叠在每个父对象的右侧,如下所示:(箭头表示方向,每个 o 表示火车的单个车厢)

ooo->

当用户单击第一节车厢时,整个火车应该旋转以指向另一个方向,这是一个示例:

^
o
o
o

当再次点击前车时,它将再次旋转:

<-oooo

因此,如果您有一列全部排好并指向 3 点钟位置的火车,并且您希望它指向 9 点钟位置,您将单击两次前车(因为每次旋转都是 90 度)并且整列火车将朝那个方向旋转,将指向前车。

我希望我有一个例子,但我没有,所以希望这会有所帮助:)

4

1 回答 1

0

因此,如果您将角度基于项目“0”,那么您就不会保留它。当您通过循环时,您会不断使用当前项目“i”。将角度计算移出循环并将它们分配为 0。您还必须调整汽车的 x 和 y 点,但这取决于方向。

function rotate(_index,_angle):Void {
    var _mcy:Number    = this[_linkArray[_index][0]]._y;
    var _mcx:Number    = this[_linkArray[_index][0]]._x;
    var _degree:Number = Math.atan2(_mcy,_mcx)*(180/Math.PI) + _angle;

    for(var _i in _linkArray[_index]) {
         /* if not the first element line up and rotate */ 
         if(_i != 0) {
            this[_linkArra[_index][_i]._rotation += _degree;
            // hypothetical hook code for a sprite attached to the car
            this[_linkArra[_index][_i]._x = this[_linkArra[_index][_i-1].hook._x;
            this[_linkArra[_index][_i]._y = this[_linkArra[_index][_i-1].hook._y;
         }
    }
 }
于 2012-11-09T14:20:52.957 回答