2012-02-24 69 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); 

更新:好吧,我看到你正在嘗試盡現。

您需要使用關鍵字「this」來引用當前的「grilla」實例。

嘗試這種情況:

this.parent.removeChild(this); 
+0

我試一下第一個代碼並沒有什麼變化:行75 \t 1120:未定義的屬性格里拉的訪問。 – m4g4bu 2012-02-24 05:01:10

+0

你將不得不提供更多信息。發佈包含對象的其餘代碼grilla – shackleton 2012-02-24 05:03:13

+0

我編輯了代碼 – m4g4bu 2012-02-24 05:10:58

0

嘗試parent.removeChild(本);

雖然這不是最乾淨的方法。你最好派遣一個iniciarApp會聽的活動。

+0

你的意思是說,當我創建grilla(addEventListener(iniciarApp.removeChild(this),detectedEvent)時,我必須發送一個事件;以及下面的代碼在grilla.as中? private function detectedEvent(e :事件):無效 {} 或者您有什麼建議 – m4g4bu 2012-02-24 13:44:14

+0

當您創建格里拉,你會做這樣的事情grilla.addEventListener(SomeEvent.STRING,removeGrilla); removeGrilla是一個方法將從刪除嗎? 。顯示列表並刪除其監聽然後在格里拉的情況下,你會做dispatchEvent(新SomeEvent(SomeEvent.STRING)); – Senekis 2012-02-24 22:43:46

+0

我嘗試用parent.removeChild(本);但沒有奏效 – m4g4bu 2012-02-25 00:07:06

相關問題