我有一个父MC(容器),里面有3个嵌套的MC(mc1,mc2,mc3)。 “容器”MC位于舞台上的某个位置(不一定是0,0),并且在左上角有登记点。当我拖动其中一个嵌套的MC(中间有注册点)时,我希望目标MC在舞台上的任何位置跟随鼠标。
我想在不使用startDrag()方法的情况下执行此操作。我知道我必须根据舞台上的鼠标位置在MOUSE_MOVE处理函数中设置目标MC的坐标,如...
container.mc1.addEventListener(MouseEvent.MOUSE_DOWN, drag);
function drag(e:MouseEvent):void{
stage.addEventListener(MouseEvent.MOSUE_MOVE, move);
}
function move(e:MouseEvent):void{
container.mc1.x = ??
container.mc2.y = ??
}
我该怎么做?我对localToGlobal和globalToLocal方法感到很困惑。
答案 0 :(得分:1)
你也可以使用mouseDown等。我有时会觉得这比startDrag更通用。以下内容将mc锁定到鼠标的当前偏移量,但很容易修改:
private var drag_info;
mc.addEventListener("mouseDown", dragStart);
private function dragStart(event:MouseEvent):void {
var who = event.target as MovieClip;
drag_info = { offsetX:mouseX-who.x, offsetY:mouseY-who.y, who:who };
stage.addEventListener("mouseMove",dragUpdate);
stage.addEventListener("mouseUp",dragStop);
}
private function dragUpdate(event:MouseEvent) {
var who = drag_info.who;
who.x = mouseX - drag_info.offsetX;
who.y = mouseY - drag_info.offsetY;
}
private function dragStop(event:MouseEvent) {
stage.removeEventListener("mouseMove",dragUpdate);
stage.removeEventListener("mouseUp",dragStop);
}
答案 1 :(得分:0)
我想说这是一个评论,但我的低声望不会让我这么做。
正如Vesper所提到的,为什么不使用startDrag()?看起来这正是你想要/需要的。至于将中心点锁定到鼠标,startDrag()覆盖了:
只需将startDrag()方法的第一个参数用作'true',即可使用中心锁定。