Drag-drop AS3: как перетащить дочерний mc из родительского mc и добавить в новый родительский mc - PullRequest
0 голосов
/ 07 октября 2010

Вот рабочий скрипт для перетаскивания шара из сцены в другую цель mc :

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

Это хорошо работает, но я новичок в AS3, и мне трудно изменить этот скрипт, чтобы перетащить шарик из родительского mc (вместо сцены) и на другой mc (целевой mc ). Для объяснения: представьте себе шар, прямоугольник, треугольник и более фигур внутри прокручиваемого mc (начальный родитель), пользователь прокручивает, чтобы выбрать форму, а затем перетаскивает его на целевой mc на сцене.

Прокрутка не проблема, но как бы вы изменили приведенный выше сценарий, чтобы мяч мог начинаться внутри родительского mc, а не на самой сцене?

Любые предложения приветствуются.

Ответы [ 2 ]

0 голосов
/ 08 октября 2010

Я нашел решение, которое хорошо работает. По пути я также решил общую проблему со строгим режимом и приведением типов (см. Строки 5 и 16 в коде ниже).

scroller.ball.addEventListener(MouseEvent.MOUSE_DOWN, pickUp); 
scroller.ball.addEventListener(MouseEvent.MOUSE_UP, dropIt);
function pickUp(event:MouseEvent):void  
{ 
   var dragIt:MovieClip = MovieClip(event.target);
   var dragPoint:Point = dragIt.parent.localToGlobal( new Point(dragIt.x, dragIt.y) ); 
   dragIt.parent.removeChild(dragIt); 
   stage.addChild(dragIt); 
   dragIt.x = dragPoint.x; 
   dragIt.y = dragPoint.y; 
   dragIt.startDrag();
}
function dropIt(event:MouseEvent):void  
{ 
   stopDrag();
   var dragIt:MovieClip = MovieClip(event.target);
   if(!dragIt.dropTarget) { 
      trace("you missed");
      return ;
   }; 
   var dropT:MovieClip = event.target.dropTarget.parent; 
   var dropPoint:Point = dropT.globalToLocal( new Point(dragIt.x, dragIt.y) ); 
   dragIt.parent.removeChild(dragIt); 
   dropT.addChild(dragIt); 
   dragIt.x = dropPoint.x; 
   dragIt.y = dropPoint.y;
}
0 голосов
/ 07 октября 2010

Пара вещей. Вам не нужно делать вызов ball.parent.remove (ball) - следующий addChild (ball) автоматически удаляет MC из любого места.

В вызове pickUp () выполните this.stage.addChild (ball), чтобы поместить мяч (поверх) во все остальное.

Затем в вызове dropIt () выполните addChild (ball) для любого MC, в который вы хотите поместить шарик ...

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