删除影片剪辑as3

时间:2010-02-12 17:37:47

标签: actionscript-3 arrays movieclip

好的,这让我疯了几个小时,我知道答案很简单。

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

首先,我不确定这是实现这一目标的最佳方式,所以请随意提出更好的方法!

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

我无法获取对影片剪辑的引用,因为它是嵌套的,可以从数组和舞台中删除它。这是我到目前为止的代码,需要添加删除和更新部分。我也应该在每次运行数组循环之前删除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);

    }

   }

3 个答案:

答案 0 :(得分:1)

你的onRemoveBox函数中的

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

看到该对象是right_container_mc的孩子,也许您可​​以尝试:

right_container_mc.removeChild(event.currentTarget);

根据您发布的代码,我不确定您是否需要数组。看起来你正在使用它来跟踪孩子的数量。显示列表已经为您完成此操作。

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

希望其中一些有帮助!

答案 1 :(得分:0)

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

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;
    }
}

有关'for each ... in'的更多信息,请查看http://help.adobe.com/en_US/AS3LCR/Flash_10.0/statements.html#for_each..in

答案 2 :(得分:0)

由于某种原因,sortBoxes函数中的每个循环都没有触发。我添加了一个trace语句来检查这一点,没有任何反应,这里是更新的代码:

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();

            }