Удалить муви клип as3 - PullRequest
       17

Удалить муви клип as3

0 голосов
/ 12 февраля 2010

Хорошо, это сводит меня с ума в течение последних нескольких часов, и я знаю, что есть простой ответ.

У меня есть scrollPane, в котором в качестве источника выбран фрагмент ролика right_container_mc. Внутри этого right_container_mc у меня есть другие клипы, называемые execiseBox, которые добавляются (в правильных позициях на сцене) из массива с циклом for. У каждого блока упражнений есть символ кнопки с названием close_btn.

Во-первых, я не уверен, что это лучший способ добиться этого, поэтому не стесняйтесь предлагать лучший способ!

Что я хочу сделать, так это щелкнуть по этому close_btn, удалить конкретный мувиклип упражнения из массива и со сцены, а затем снова пройтись по массиву, чтобы все мувиклипы блока упражнений обновили свою позицию на сцене.

У меня проблемы с получением ссылки на фрагмент ролика, потому что он вложен, чтобы удалить его из массива и сцены. Вот код, который у меня пока есть, нужно добавить в удаление и обновление частей. Кроме того, я должен удалить все текущие экземпляры видеоклипов exercBox перед каждым циклом массива?

Любая помощь очень ценится.

 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 ]

1 голос
/ 12 февраля 2010

в вашей функции onRemoveBox

event.currentTarget должен возвращать объект, с которым была вызвана функция.

Учитывая, что этот объект является дочерним по отношению к right_container_mc, возможно, вы могли бы попробовать:

right_container_mc.removeChild(event.currentTarget);

Судя по опубликованному вами коду, я не уверен, что вам даже нужен массив. Похоже, вы используете его, чтобы отслеживать количество детей. Список отображения уже делает это для вас.

Так что я думаю, что ваш вид может просто ссылаться на right_container_mc.numChildren вместо длины массива.

Надеюсь, что это поможет!

0 голосов
/ 14 февраля 2010

По какой-то причине для каждого цикла в функции 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();

            }
0 голосов
/ 13 февраля 2010

Чтобы избавиться от boxArray, вы можете просто пройти через все поля ExerciseBox в 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

...