Как удалить ребенка (Movieclip) и добавить к новому родителю (Movieclip) - PullRequest
0 голосов
/ 02 июня 2009

Мне нужно удалить дочерний элемент (movieClip) из родительского элемента (movieClip) при перетаскивании и добавить того же дочернего элемента (movieClip) в другой фрагмент ролика при его удалении.

этот метод используется для перетаскивания

function pickUp(event:MouseEvent):void 
{
    event.target.startDrag();
}

когда я уронил его

function dropIt(event:MouseEvent):void
{
    event.target.parent.removeChild(event.target); //for removing from previous parent clip

    event.target.dropTarget.parent.addChild(event.target); // add to new Moviclip
}

Но клип не виден или недоступен при отбрасывании ...

Помогите мне преодолеть эту проблему.

1 Ответ

1 голос
/ 03 июня 2009

У меня была быстрая игра, вот что я придумал:

В моем примере есть MovieClip на сцене, называемая «шар», и несколько других MovieClip, разбросанных вокруг для использования в качестве dropTargets.

ball.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
stage.addEventListener(MouseEvent.MOUSE_UP, dropIt);

function pickUp(event:MouseEvent):void 
{
    var ballPoint:Point = ball.parent.localToGlobal( new Point(ball.x, ball.y) );

    ball.parent.removeChild(ball);
    addChild(ball);
    ball.x = ballPoint.x;
    ball.y = ballPoint.y;
    ball.startDrag();
}

function dropIt(event:MouseEvent):void 
{
    ball.stopDrag();
    if(!event.target.dropTarget) { return };

    var dropT:MovieClip = event.target.dropTarget.parent;
    var ballPoint:Point = dropT.globalToLocal( new Point(ball.x, ball.y) );

    ball.parent.removeChild(ball);
    dropT.addChild(ball);
    ball.x = ballPoint.x;
    ball.y = ballPoint.y;
}

По сути, обработчик PickUp удаляет «шариковый» MovieClip из его родителя и добавляет его в корневой DisplayObject. Это гарантирует, что шар находится сверху, поэтому dropTarget будет работать (dropTarget будет работать только с объектами ниже в порядке стека). Положение шара x / y вычисляется (с использованием localToGlobal) для его нового родителя и применяется. Тогда начало перетаскивания называется.

Обработчик dropIt сначала вызывает stopDrag, а затем возвращает, если не может найти dropTarget. Новая x / y позиция для мяча вычисляется с использованием globalToLocal на этот раз, чтобы получить новую позицию в своей цели падения. Затем мяч удаляется и добавляется к его новому родителю (dropTarget). Новая позиция применяется.

Кажется, в моем случае очень хорошо работает.

Также ... Я обнаружил, что хороший способ проверить, работает ли он, это временно применить другие фильтры размытия или dropShadow к dropTargets на сцене. Таким образом, когда вы уроните шарик на них, он унаследует фильтр, и вы увидите некоторую визуальную обратную связь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...