0

好的,在过去的几个小时里,这一直让我发疯,我知道有一个简单的答案。

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

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

我想要做的是,当单击此 close_btn 时,从数组和舞台中删除特定的练习框影片剪辑,然后再次循环遍历数组,以便所有练习框影片剪辑更新它们在舞台上的位置。

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

    }

   }
4

3 回答 3

1

在你的 onRemoveBox 函数中

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

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

right_container_mc.removeChild(event.currentTarget);

根据您发布的代码,我不确定您甚至需要一个数组。看起来您正在使用它来跟踪孩子的数量。显示列表已经为您完成了这项工作。

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

希望有些帮助!

于 2010-02-12T17:48:06.470 回答
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;
    }
}

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

于 2010-02-12T23:42:53.927 回答
0

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

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

            }
于 2010-02-14T12:57:28.580 回答