Flash as3鼠标自定义光标嵌套在movieclip中

时间:2013-12-10 08:28:23

标签: actionscript-3 flash

我有一个父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方法感到很困惑。

see pic

2 个答案:

答案 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()覆盖了:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Sprite.html#startDrag%28%29

只需将startDrag()方法的第一个参数用作'true',即可使用中心锁定。