2010-02-12 155 views
0

好吧,这已经让我在过去的几个小时里疯了,我知道有一个简单的答案。删除影片剪辑as3

我有一个scrollPane,它有一个名为right_container_mc的影片剪辑,因为它是源代码。 在这个right_container_mc里面,我还有其他一些名为execiseBox的影片剪辑,它们从具有for循环的数组中被添加(在舞台上的正确位置)。 每个练习框都有一个名为close_btn的按钮符号。

首先,我不确定这是达到此目的的最佳方法,因此请随时提出更好的方法!

我想要做的是,当这个close_btn被点击时,从数组中删除特定的exerciseBox movieclip,然后从舞台中再次循环数组,以便所有练习框动画片段更新它们在舞台上的位置。

我无法获取对影片剪辑的引用,因为它是嵌套的,以便将它从数组和阶段中删除。这是我迄今为止的代码,需要添加删除和更新部分。另外我应该在数组循环每次运行之前删除所有当前的exerciseBox影片剪辑的实例?

任何帮助,非常感谢。

function addMovieClipsToStage(event:MouseEvent):void 
    { 
    scrollPaneRight.source = right_container_mc; 
    exerciseBox = new Exercisebox(); 
    exerciseBox.close_btn.addEventListener(MouseEvent.CLICK, onRemoveBox); 
    boxArray.push(exerciseBox); 
    sortBoxes(); 
    scrollPaneRight.update(); 
    } 

    function onRemoveBox(event:MouseEvent):void 
    { 

    } 

    function sortBoxes():void 
    { 
    for (var i:int =0; i<boxArray.length; i++) 
    { 
    right_container_mc.addChild(exerciseBox); 
    exerciseBox.x = 0; 
    exerciseBox.y = ((115 + 3)*i); 

    } 

    } 

回答

1

在onRemoveBox功能

event.currentTarget应该返回函数被触发的对象。

眼看作为对象right_container_mc的孩子,也许你可以试试:

right_container_mc.removeChild(event.currentTarget); 
基于你已经发布的代码

我不知道,你甚至需要一个数组。看起来你正在用它来跟踪孩子的数量。显示列表已经为你做了这个。

所以我认为你的排序可能只是参考right_container_mc.numChildren而不是数组长度。

希望这有助于一些!

+0

我得到以下编译器错误: 1118:静态类型对象的值隐式强制为可能无关的类型闪存。显示:的DisplayObject。 – 2010-02-12 18:21:09

+0

好吧,我刚刚在event.currentTarget上做了一个跟踪,它显示了简单的按钮。我将上面的内容更改为right_container_mc.removeChild(event.currentTarget.parent);这似乎有效。现在我只需要获取剩余的影片剪辑即可更新位置 – 2010-02-12 18:28:42

0

为了摆脱boxArray,你可以循环遍历right_container_mc中的所有练习框。

function addMovieClipsToStage(event:MouseEvent):void 
{ 
    scrollPaneRight.source = right_container_mc; 
    exerciseBox = new Exercisebox(); 
    exerciseBox.close_btn.addEventListener(MouseEvent.CLICK, onRemoveBox); 
    right_container_mc.addChild(exerciseBox); 
    sortBoxes(); 
    scrollPaneRight.update(); 
} 

function onRemoveBox(event:MouseEvent):void 
{ 
    right_container_mc.removeChild(event.currentTarget); 
    sortBoxes(); 
} 

function sortBoxes():void 
{ 
    var count:int = 0; 
    for each(var exerciseBox:Exercisebox in right_container_mc) 
    { 
     count++; 
     exerciseBox.x = 0; 
     exerciseBox.y = (115 + 3) * count; 
    } 
} 

有关“每个...在”更多信息,请http://help.adobe.com/en_US/AS3LCR/Flash_10.0/statements.html#for_each..in

0

出于某种原因,在sortBoxes功能每个循环不点火。我添加了一个跟踪语句来检查这一点,并没有任何反应,这里是更新后的代码:

public function addMovieClipsToStage(event:MouseEvent):void 
      { 
       scrollPaneRight.source = right_container_mc; 
       exerciseBox = new Exercisebox(); 
       exerciseBox.close_btn.addEventListener(MouseEvent.CLICK, onRemoveBox); 
       exerciseBox.x = 0; 
       exerciseBox.y = (118 * exerciseBoxAmt); 
       right_container_mc.addChild(exerciseBox); 
       exerciseBoxAmt++; // the position of the boxes added to stage variable 
       sortBoxes(); 
       scrollPaneRight.update(); 
      } 

      public function sortBoxes():void 
      { 
       var count:int = 0; 
       for each (var exerciseBox:Exercisebox in right_container_mc) 
       { 

        exerciseBox.x = 0; 
        exerciseBox.y = (118 * count); 
        count++; 
        trace(count); //does not display in output window!! 
       } 
      } 


      public function onRemoveBox(event:MouseEvent):void 
      { 
       right_container_mc.removeChild(event.currentTarget.parent); 
       exerciseBoxAmt--; 
       sortBoxes(); 

      }