Flash AS3 拖动多个对象

Flash AS3 Dragging multiple objects

我正在寻找的是当我在舞台上拖动一个对象时,我想要一个底层对象(同一层)被拖动,并保持在放置主要对象的位置。我需要在多对象情况下使用数组吗? 这只是一个对象(和 'sub-object'),总共会有 22 个,我不能将子对象添加到它的动画片段中,否则舞台上的其他 21 个对象将重叠并且互相干扰。

这是我目前所拥有的,请参见插图。谁能告诉我一些可用的代码?

CF.addEventListener(MouseEvent.MOUSE_DOWN, dragCF);
CF.addEventListener(MouseEvent.MOUSE_OVER, fadeCF_spaceIN);
CF.addEventListener(MouseEvent.MOUSE_UP, fadeCF_spaceIN);

function dragCF(evt:MouseEvent):void {
    addChild(MovieClip(evt.currentTarget));
    evt.currentTarget.startDrag();
    stage.addEventListener(MouseEvent.MOUSE_UP, dropCF);   }   

function dropCF(evt:MouseEvent):void {
     stopDrag();
     stage.removeEventListener(MouseEvent.MOUSE_UP, dropCF);  }

function fadeCF_spaceIN(evt:MouseEvent):void {
    CF_space.alpha = .5; 
    stage.addEventListener(MouseEvent.MOUSE_OUT, fadeCF_spaceOUT);
    stage.addEventListener(MouseEvent.MOUSE_DOWN, fadeCF_spaceOUT);      }

function fadeCF_spaceOUT(evt:MouseEvent):void {
    CF_space.alpha = 0; 
    stage.removeEventListener(MouseEvent.MOUSE_OUT, fadeCF_spaceOUT);  }

示例说明:

var CF_1:Array = [CF_mc, CF_space];  // instance names
for each(var CF1_MC:MovieClip in CF_1)
{
    CF1_MC.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
    CF1_MC.addEventListener(MouseEvent.MOUSE_UP, dropIt);
    CF1_MC.startX = CF1_MC.x;
    CF1_MC.startY = CF1_MC.y;
}

function pickUp(event:MouseEvent):void 
{
    event.target.startDrag(true);
    event.target.parent.addChild(event.target);
}

function dropIt(event:MouseEvent):void 
{
    event.target.stopDrag();
}

不能 100% 确定您的意思,但是您可以使用 ENTER_FRAME 函数代替 startDrag 和 stopDrag 吗?这是一个非常小的示例,您也可以将其用于对象数组。

var xDifference:Number;
var yDifference:Number;
var dragging:Boolean;

draggableObject.addEventListener(MouseEvent.MOUSE_DOWN, mDown);
draggableObject.addEventListener(MouseEvent.MOUSE_UP, mUp);
stage.addEventListener(Event.ENTER_FRAME, loop);

function loop(evt:Event):void{
    if(dragging){
        draggableObject.x = mouseX;
        draggableObject.y = mouseY;

        secondaryObject.x = draggableObject.x + xDifference;
        secondaryObject.y = draggableObject.y + yDifference;
    }
}

function mDown(evt:MouseEvent):void{
    xDifference = secondaryObject.x - draggableObject.x;
    yDifference = secondaryObject.y - draggableObject.y;
    dragging = true;
}

function mUp(evt:MouseEvent):void{
    dragging = false;
}

根据具体情况,您可能还想计算鼠标光标和 draggableObject 在 MOUSE_DOWN 上的注册点之间的差异,以防止 draggableObject 跳转到其中心点恰好位于鼠标位置的位置。

感谢您的补充,事实证明更简单了,太简单了:

object.addEventListener(MouseEvent.MOUSE_DOWN, drag);
object.addEventListener(MouseEvent.MOUSE_UP, drop);

function drag(evt:MouseEvent):void {
     addChild(MovieClip(evt.currentTarget));
     evt.currentTarget.startDrag();
}

function drop(evt:MouseEvent):void {
     stopDrag();
     object_space.x = object.x;
     object_space.y = object.y;
}