0

複製したムービークリップをデイジーチェーン接続しようとしていますが、それぞれを突き合わせる方法がわかりません。私は鉄道インストラクター向けのトレーニング支援を構築しています。この支援の一部は、インストラクターが動的に列車を構築できることです。

locomotive、hopper、flat_car、tank_car、box_car の合計 5 つのオブジェクトがあります。インストラクターが車の 1 つをクリックすると、複製がステージ上に作成され、インストラクターはその複製をステージ上の任意の場所にドラッグ アンド ドロップできます。彼/彼女が別の車をクリックすると同じことが起こりますが、複製の 1 つが別の車の上にドロップされると、列車の建設が始まります。新しい車はターゲットの右側にスナップし、別の車がドロップされると右にスナップします.

登録ポイントは私にとってはめちゃくちゃです。それは中心なので、ターゲットの半分の幅とドロップされる車の半分の幅を把握する必要があります。これにより、車がスナップするポイントが得られます。たとえば、次のようになります。

ターゲットの車が 50 で、ドロップされる車が 50 の場合、スナップするポイントは 25 + 25 になるはずです。ポイントは75にする必要があります。

車はそれぞれサイズが異なるため、これが難しくなっています。すべて同じサイズであればいいのにと思います:(以下は私が使用しているコードです。私が話していることを説明するのに役立つかもしれません:

var _carArray:Array = ["locomotive","tank_car","box_car","hopper","flat_car"];

/*** 
* the function below is called when a duplicated
* object is dropped on a another duplicated object
* I could add that code, but I figured it wasn't 
* needed since my math is what I'm struggling with
***/

function BuildTrain(_mc,_instanceName):Void
{
    var _tar        = eval(_mc._droptarget);
    var _carHalf    = (_mc._width) / 2;
    var _targetHalf = (_tar._width) / 2;
    var _math       = _targetHalf + _carHalf;
    for(var _i in _carArray)
    {
        if(instanceName == _carArray[_i])
        {
            _tar.attachMovie(_instanceName,_instanceName,200+_count,{_x:_math});
        }
        _p.removeMovieClip();
    }
}

注:これを理解するには数学が必要なので、これを数学としてタグ付けしました。

4

1 に答える 1

1

現在の列車を保持する別の配列を作成します。

var myTrain = [];

新しい車をミックスにスナップするたびに、それを myTrain 配列に追加します。次に、myTrain 配列を反復処理し、すべてを順番に再配置します。

function BuildTrain(_mc,_instanceName):Void
{
    var _tar        = eval(_mc._droptarget);
    var _carHalf    = (_mc._width) / 2;
    var _targetHalf = (_tar._width) / 2;
    var _math       = _targetHalf + _carHalf;
    for(var _i in _carArray)
    {
        if(instanceName == _carArray[_i])
        {
            myTrain.push(_tar.attachMovie(_instanceName,_instanceName,200+_count,{_x:_math})); //put the newly created car in the mytrain array;
            redrawTrain();
        }
        _p.removeMovieClip();
    }
}

function redrawTrain(){
    var curX = 0;
    for(var i = 0;i < myTrain.length; i++){
        myTrain[i]._x = curX + (myTrain[i]._width * .5); //offset by half the car width since it's anchored in the center
        curX += myTrain[i]._width;
    }
}
于 2012-11-08T00:24:09.073 に答える