0

私は AS2 を使用しており、人が動的に構築できる列車を持っています。ユーザーがステージ上のオブジェクトをクリックすると、複製が作成されます。ユーザーがその複製をクリックして別のオブジェクトにドラッグすると、ターゲット オブジェクトの右側にスナップし、配列が作成または追加されます。したがって、ユーザーは基本的に、車 (または必要に応じて子供) の数で列車を構築できます。

私が追加した機能の 1 つは、ユーザーが親をクリックして離したときに、列車全体が整列して新しい方向を指す座標に_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 が起動されると、「鉄道車両」がステージに取り付けられ、そのオブジェクトがマスターとなり、無限の複製が作成されます。ここでの最終的な目標は、ユーザーがこれらの複製を使用してトレーニング支援用の列車を構築することです。したがって、ユーザーがその列車の構築を開始したい場合は、複製を取得して別のオブジェクトの上にドラッグ アンド ドロップすると、これら 2 つがリンクされます。ユーザーはこれを実行して、必要なだけ大きな列車を構築できます。

列車を構築するとき、すべての車両は次のように各親オブジェクトの右側に積み重ねられます: (矢印は方向を示し、各 o は列車の単一の車両を示します)

ooo->

ユーザーが最初の車両をクリックすると、列車全体が回転して別の方向を向くはずです。例を次に示します。

^
o
o
o

前の車をもう一度クリックすると、再び回転します。

<-oooo

したがって、すべてが一列に並んでいて 3 時の位置を指している列車があり、それを 9 時の位置に向けたい場合は、先頭の車両を 2 回クリックします (各回転は 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 に答える