0

タイトルが私がやりたいことを反映しているかどうかさえわかりません。裏話はこちら。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 への呼び出し、静的型などへの参照など

平凡な問題だからこそ、イライラするのです...

どんな助けでも大歓迎です。ありがとう

4

2 に答える 2

0

あなたの質問の詳細を追うのに少し苦労しています(おそらく、あなたの投稿で「ドロップ機能」の一部が失われたと思います)。

しかし、問題は、親への正確なパスを知らずに、親からムービー クリップを削除するにはどうすればよいかということです。答えは簡単です:

foodDrag.parent.removeChild(foodDrag);

foodDragそれが削除したいムービー クリップであると仮定します。

私が要点を逃している場合は、返信して、あなたが求めていることを理解するのを手伝ってください.

于 2010-10-31T05:18:04.050 に答える
0

これを試してみましたが、うまくいきました!!!:

var mcParent:String=(foodDroppedMC.parent.name);
pyramid[mcParent].removeChild(foodDroppedMC);

誰かがこれがどのように機能するかについて洞察を与えることができれば、私は知りたいです. タイプが「String」の mcParent は (foodDroppedMC.parent.name) を文字列にし、mc パスの [] ブラケットは何らかの形でそれを MC としてキャストしているため、暗黙的な強制はありません。それは私の推測です...笑。

とにかく幸せな日々。このソリューションを自由に拡張してください。Google 大学 (フラッシュを 3 度 =P として取得した場所) が [] が配列以外で使用されていることについて多くを教えているかどうかはよくわかりません。

于 2010-10-31T05:20:32.087 に答える