繁体   English   中英

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

[英]Drag-drop AS3: how to drag child mc out of parent mc and add to new parent mc

这里是一个工作脚本拖放从舞台上一未进的另一个目标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内而不是舞台上开始?

任何建议欢迎。

几件事。 您不需要进行ball.parent.remove(ball)调用-下一个addChild(ball)会自动将MC从任何位置删除。

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

然后在dropIt()调用中,对要放入球的MC进行addChild(ball)。

我想出了一个行之有效的解决方案。 一路上,我还解决了使用严格模式和强制转换的常见问题(请参见下面的代码中的第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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM