我需要在拖动时从父(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
}
但是在放弃时,剪辑不可见或不可用...
帮助我克服这个问题。
答案 0 :(得分:1)
我玩得很快,这就是我想出的:
我的例子在舞台上有一个名为“ball”的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处理程序从其父级删除“ball”MovieClip,并将其添加到根DisplayObject。这可确保球位于顶部,因此dropTarget将起作用(dropTarget仅适用于堆栈顺序较低的对象)。球的x / y位置(使用localToGlobal)为其新父级计算并应用。然后开始拖动调用。
dropIt处理程序首先调用stopDrag,如果找不到dropTarget则返回。这次使用 globalToLocal 计算球的新x / y位置,以获得其在droptarget中的新位置。然后移除球并将其添加到其新父级(dropTarget)。新职位已经应用。
在我的情况下似乎工作得很好。
另外......我发现测试它是否正常工作的好方法是暂时将不同的blur或dropShadow过滤器应用到舞台上的dropTargets。这样当你将球放到它们上面时,它将继承过滤器,你可以看到一些视觉反馈。