2012-02-24 11 views
0

私はコンテナをmcと呼びます。その内側にオプションの壁を作るためにムービークリップのグリッドを生成します。私は、このオプションのいずれかを選択すると、このメッセージが表示されます:エラー#2025:供給したDisplayObjectは呼び出し元の子でなければなりません。..提供されているDisplayObjectは呼び出し元の子でなければなりません

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

 

    In the Class iniciarApp I've this: 

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

    mc.x = 0; 
    mc.y = 0; 
    mc.name = "square"; 
    addChild(mc); 

    grilla.name = "grilla"; 
    grilla.x = mc.x; 
    grilla.y = mc.y; 
    mc.addChild(grilla); 


---------- 


    in Grilla.as: 

    public class Grilla extends MovieClip { 

     private var boxNum:int = 48; 
    private var cols:int = 6; 
    private var rows:int = Math.ceil(boxNum/cols); 
    private var boxCount:int = 0; 

    public function Grilla(){ 

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

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

      var caja:clip = new clip(); 

      caja.x = -115 + caja.width * px; 
      caja.y = -150 + caja.height * py; 
      caja.name = "opcion" + (py + 1); 
      caja.mouseChildren = false; 

      var contentText = new TextField(); 
      var formato = new TextFormat(); 
      formato.size = 14; 
      contentText.defaultTextFormat = formato; 

      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, seleccionarOpcion); 

      } 

      boxCount++; 

      } 

      } 

      var barra:score = new score(); 
      barra.x = 80; 
      barra.y = -200; 
      barra.puntajeTXT.text = "hola"; 
      addChild(barra); 

     } 


     private function seleccionarOpcion(m:MouseEvent):void 
     { 
      TweenMax.to(MovieClip(m.target), 0.5, {scaleY: -1}); 
      m.target.removeEventListener(MouseEvent.CLICK, seleccionarOpcion); 
      m.target.buttonMode = false; 

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


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


    **[HERE] i need to remove the instance of grilla created in the other class** 

     **m.currentTarget.parent.parent.removeChild(grilla);** << this is not working  


    var trivia:generarTrivia = new generarTrivia(opt); 

    trivia.x = 0; 
    trivia.y = 0; 
    trivia.name = "trivia"; 
    addChild(trivia); 

     } 

    } 


答えて

0

それは上記のコードからも明らかではありませんオブジェクト "グリラ"が実際に参照しているもの。

あなたがgrillaを削除しようとしている場合は、あなただけ書くことができます:

grilla.parent.removeChild(grilla); 

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

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

を更新:[OK]を、私はあなたが今やろうとしているものを参照してください。

"this"というキーワードを使用して、 "grilla"の現在のインスタンスを参照します。

これを試してみてください:

this.parent.removeChild(this); 
+0

私は最初のコードを試しても何も変わりません:Line 75 \t 1120:定義されていないプロパティgrillaへのアクセス。 – m4g4bu

+0

あなたはより多くの情報を提供する必要があります。オブジェクトgrillaを含むコードの残りの部分を投稿する – shackleton

+0

コード – m4g4bu

0

をparent.removeChild(これを)試してみてください。

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

+0

グリラ(addEventListener(iniciarApp.removeChild(this)、detectEvent)を作成したときにイベントをディスパッチする必要があります。grilla.asの次のコードは privateEvent detectionEvent :Event):void { } または何をお勧めしますか? – m4g4bu

+0

grilla.addEventListener(SomeEvent.STRING、removeGrilla); removeGrillaのような処理を行います。リストを表示してそのリスナーを削除してから、GrillaのインスタンスでdispatchEventを実行します(新しいSomeEvent(SomeEvent.STRING)); – Senekis

+0

parent.removeChild(これ)で試してみましたが動作しませんでした – m4g4bu

関連する問題