这是一个工作脚本,用于将球从舞台拖放到另一个目标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内而不是在舞台本身内启动?
欢迎任何建议。
答案 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;
}