拖放AS3:如何将子mc拖出父mc并添加到新的父mc

时间:2010-10-06 21:19:31

标签: flash actionscript-3

这是一个工作脚本,用于将舞台拖放到另一个目标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 :(得分:0)

一些事情。你不需要做一个ball.parent.remove(ball)调用 - 下一个addChild(ball)会自动从任何地方删除MC。

在pickUp()调用中,执行this.stage.addChild(ball),将球放入(顶部)其他所有内容。

然后在dropIt()调用中,在想要将球放入的MC中执行addChild(ball)...

答案 1 :(得分:0)

我提出了一个运作良好的解决方案。 在此过程中,我还解决了严格模式和强制转换的常见问题(参见下面代码中的第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;
}