タイトルが私がやりたいことを反映しているかどうかさえわかりません。裏話はこちら。5 つの「ホルダー」ムービークリップを含むムービークリップがあります。これらは、動的に追加されたムービークリップのコンテナです。
親コンテナーにはピラミッドのインスタンス名があり、ホルダー インスタンス名は 6 つの食品グループの後にラベル付けされます。つまり、'grainholder'、'fruitholder'、'vegetableholder' などです。
ホルダーはピラミッド コンテナー内にあり、インスタンス名は上記のようになり、ピラミッド コンテナーが表示リストに追加されます。「foodMC」MCをそれぞれのホルダーに追加する addFoodToPyramid() 関数があります。したがって、[オブジェクト Apple] は、pyramid.fruitholder.addChild(Apple) によって動的に追加されます。この関数はリスナーも追加します。呼び出しと関数は次のとおりです。
呼び出し (例として穀物を使用します) は次のとおりです。
addFoodToPyramid(grainArray, grainHolder, grainCounter);
そして機能は次のとおりです。
function addFoodToPyramid(thisArray:Array, thisHolder:MovieClip, thisCounter:Number):void {
thisCounter = 0;
for (var f:Number=0; f<thisArray.length; f++)
{
trace(thisArray.length);
foodMC = (thisArray[f] as MovieClip);
trace(foodMC);
thisHolder.addChild(foodMC);
foodMC.addEventListener(MouseEvent.MOUSE_DOWN, startFoodDrag, false, 0, true);
thisMC.scaleX = thisMC.scaleY = .7;
thisMC.x = 60 * thisCounter;
thisCounter++;
}
}
次に、startDrag 関数があります。
function startFoodDrag(e:MouseEvent):void
{ foodDrag = e.target as MovieClip; foodDrag.startDrag(); foodPoint = new Point(foodDrag.x,foodDrag.y); stage.addEventListener(MouseEvent.MOUSE_UP, stopFoodDrag, false, 0, true); }
次に、ドロップ機能と問題はここにあります:
foodDrag = foodDrop;
stage.addEventListener(MouseEvent.MOUSE_UP, stopFoodDrag);
if(foodDrag.dropTarget.parent==myPlate){
// ここに問題があります removeChild(foodDrag); // foodDrag の参照が間違っているため、明らかにエラーが返されます
}
わかりましたので、明らかに参照は直接の removeChild() ではなく、特定のパスです。お気に入り:
pyramid.*THE-HOLDER-OF-foodDRAG*.removeChild(foodDrag).
しかし、私はそれを行う方法について頭を悩ませることができません。私はもう試した:
var mcParent:MovieClip=(foodDroppedMC.parent);
pyramid.mcParent.removeChild(foodDroppedMC);
// エラー 1118 を返す Implicit Coercion
私はもう試した:
var mcParent:String=(foodDroppedMC.parent.name);
pyramid.getChildByName(mcParent).removeChild(foodDroppedMC);
// return 1061 未定義の可能性があるメソッド removeChild への呼び出し、静的型などへの参照など
平凡な問題だからこそ、イライラするのです...
どんな助けでも大歓迎です。ありがとう