私は自分の問題を説明するために最善を尽くします。おそらく私のアプローチはこれを行う方法でさえありませんが、ここにあります:
私は、鉄道の教官が偽の鉄道を使用し、議論に基づいてシナリオを作成できるようにする訓練補助具を再構築する任務を負っています。インストラクターは、線路だけがあり、車も機関車もない車両基地から始めます。スクリーンショットは次のとおりです。
インストラクターは、そのマップの下にいくつかのオブジェクトを持っており、シナリオを説明するためにレール ヤードにドラッグ アンド ドロップできます。スクリーンショットは次のとおりです。
オブジェクトは私のライブラリにあり、swf が最初に実行されたときに単一のオブジェクトがステージに配置されます。リンクされた名前、オブジェクトがアタッチされたときに配置する場所の x および y 座標を持つオブジェクト配列を作成しました。アイテムをステージに配置するためのオブジェクトとループは次のとおりです。
全部で約 50 項目ありますが、この例では 2 つだけ示します。
オブジェクト配列
var _objectArray = [{obj:{name:"detector",x:20,y:680}},{obj:{name:"locomotive",x:270,y:610}}];
ムービーループを添付
/* pulls objects from library and places on the stage */
for(var _i in _objectArray)
{
var _name = String(_objectArray[_i].obj.name);
var _xx = _objectArray[_i].obj.x;
var _yy = _objectArray[_i].obj.y;
this.attachMovie(_name,_name,this.getNextHighestDepth(),{_x:_xx,_y:_yy});
this[_name].onRelease = function()
{
Clone(this);
}
}
インストラクターがシナリオの作成を開始すると、オブジェクトをクリックすると、そのオブジェクトの複製がステージ上のオブジェクト領域の外に配置されます。次に、その複製をステージ上の任意の場所にドラッグ アンド ドロップできます。Clone()
for ループでは、関数を呼び出していることがわかります。
クローン機能
var _number:Number = 0;
var _cloneArray:Array = [];
function Clone(_mc):Void
{
var _clone = String("clone" + _number);//used to make unique clone names
_cloneArray.push(_clone);//build array so I can remove objects from stage
/* duplicate objects */
_mc.duplicateMovieClip(_clone,100+_number,{y:580,_x:Stage.width/2});
/* set press event */
this[_clone].onPress = function()
{
this.swapDepths(10000);//bring to the top
this.startDrag(false,0,0,1024,580);//drag to constraints
}
/* set release event */
this[_clone].onRelease = function()
{
this.stopDrag();
if(_mc._name == "loco" || _mc._name == "car")
{
BuildTrain(this);
}
}
}
これはすべてうまく機能しますが、問題が発生するのは、インストラクターが列車を「構築」したいときです。つまり、インストラクターがステージ上に機関車を配置し、次にタンク車をステージに配置します。インストラクターがタンク車をドラッグして機関車の上にドロップすると、タンク車がその後ろにスナップします。機関車インライン。その場合、インストラクターが機関車をどこかにドラッグしたい場合、タンク車は機関車に追従します。これでユニットが1つになったようなものです。この教官は、機関車の後ろに 20 両の車両を必要とする可能性があります。これは、機関車と車が一緒に「スナップ」されたスクリーンショットです。
車を一緒にスナップできるようにするコードを次に示します。これは正常に機能しますが、問題は、すべての車がスナップされた後、オブジェクトを 1 つのユニットとしてドラッグできないことです。
ビルドトレイン
function BuildTrain():Void
{
for(var _i in _consistArray)
{
var _value = _consistArray[_i];
var _math = _mc.width + this[_value]._width;
var _space = 1; // this is the space between cars
if(eval(_mc._droptarget)._name === _value)
{
_mc._x = this[_value]._x + _math / 2 + _space;
_mc._y = this[_value]._y;
}
}
}
Clone()
長い列車を作りたい場合は、1 台の車を機関車にスナップし、車を車にスナップします。問題は、スナップした後にそれらを 1 つのユニットにする方法がわからないことです。親子関係を使って配列を構築することも考えましたが、よくわかりません。
これが長い投稿であることは承知していますが、いくつかの背景が役に立てば幸いです。
アップデート
親の中に存在する子が親に従うのは論理的に思えるので、私はエイミーが以下に持っていたアイデアをいじっています。私はなんとか子供を1人手に入れることができました-これでは十分ではありません。もっと多くの子供を付けることができる必要があります-しかし、これは正しい道だと思います. 最後に取り付けた車に車を取り付けたいのですが?ここに私が取り組んでいるコードがあります:
function BuildTrain(_mc):Void
{
for(var _i in _consistArray)
{
var _value = _consistArray[_i];
var _math = _mc._width + this[_value]._width;
var _space = 2; // gap between cars
if(eval(_mc._droptarget)._name == _value)
{
this[_value].attachMovie("tank_car","consist"+_i,this.getNextHighestDepth(),{_x:_math / 2 + _space});
}
}
}