0

私は mc と呼ばれるコンテナを持っています。その中には、オプションの壁を作るためにムービークリップのグリッドを生成します。このオプションのいずれかを選択すると、次のメッセージが表示されます。

エラー #2025: 指定された DisplayObject は、呼び出し元の子である必要があります..

コードは次のとおりです。

  クラス iniciarApp で私はこれを持っています:

       var mc:MovieClip = new MovieClip();
       var Grilla:Grilla = new Grilla();

    mc.x = 0;
    mc.y = 0;
    mc.name = "正方形";
    addChild(mc);

    Grilla.name = "グリル";
    グリル.x = mc.x;
    Grilla.y = mc.y;
    mc.addChild(グリル);


----------


   Grilla.as:

     public class Grilla は MovieClip を拡張します {

        プライベート var boxNum:int = 48;
    プライベート var cols:int = 6;
    private var rows:int = Math.ceil(boxNum / cols);
    プライベート var boxCount:int = 0;

    public function Grilla(){

           for (var py:int = 0; py < 行; py++) {

        for (var px:int = 0; px < cols; px++) {

            var caja:clip = 新しいクリップ();

            caja.x = -115 + caja.width * px;
            caja.y = -150 + caja.height * py;
            caja.name = "オプション" + (py + 1);
            caja.mouseChildren = false;

            var contentText = new TextField();
            var format = new TextFormat();
            format.size = 14;
            contentText.defaultTextFormat = フォーマット;

            contentText.width = 36;
            contentText.height = 34;
            contentText.x = -10;
            contentText.y = -10;

            for (var u:uint = 0; u < boxNum; u++) {
                contentText.text = "" + u;
            }

            addChild(caja);
            caja.addChild(contentText);

            if (boxCount < boxNum) {

            caja.buttonMode = true;
            caja.addEventListener(MouseEvent.CLICK, 選択オプション);

            }

            boxCount++;

             }

            }

            var barra:score = 新しいスコア();
            バラ x = 80;
            barra.y = -200;
            barra.puntajeTXT.text = "こんにちは";
            addChild(バラ);

        }


        プライベート関数 selectionarOpcion(m:MouseEvent):void
        {
            TweenMax.to(MovieClip(m.target), 0.5, {scaleY: -1});
            m.target.removeEventListener(MouseEvent.CLICK, 選択オプション);
            m.target.buttonMode = false;

            var opcionABuscar:String;
            opcionABuscar = m.currentTarget.name;


            var opt:String = opcionABuscar.substring(6);


     **[ここ] 他のクラスで作成された Grilla のインスタンスを削除する必要があります**

        **m.currentTarget.parent.parent.removeChild(grilla);** << これは機能していません    


    var trivia:generarTrivia = 新しいgenerarTrivia(opt);

    トリビア.x = 0;
    トリビア.y = 0;
    trivia.name = "トリビア";
    addChild(トリビア);

        }

    }


4

2 に答える 2

0

parent.removeChild(this); を試してください。

それは最もクリーンな方法ではありませんが。iniciarApp がリッスンするイベントをディスパッチする方がよいでしょう。

于 2012-02-24T07:39:59.887 に答える
0

上記のコードからは、オブジェクト「grilla」が実際に何を参照しているのか明確ではありません。

グリルを削除しようとしている場合は、次のように記述できます。

grilla.parent.removeChild(grilla);

それがあなたがやろうとしていることかどうかはわかりません。クリックしたばかりのオブジェクトを削除しようとしている場合は、次のことを試してください。

m.currentTarget.parent.removeChild(m.currentTarget);

更新:わかりました。あなたが今何をしようとしているのかわかりました。

現在の「grilla」のインスタンスを参照するには、「this」というキーワードを使用します。

これを試して:

this.parent.removeChild(this);
于 2012-02-24T04:52:21.190 に答える