2012-02-24 34 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

相关问题