Flash AS3拖动多个对象

时间:2017-09-07 16:12:17

标签: actionscript-3 flash

我正在寻找的是当我在舞台上拖动一个物体时,我想要拖动一个底层物体(同一层),并保持放置主要物体的位置。我是否需要在多个对象的情况下使用数组? 这仅适用于一个对象(以及'子对象'),总共将有22个,我无法将子对象添加到其movieclip中,否则将其他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);  }

示例说明:

3 个答案:

答案 0 :(得分:0)

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();
}

答案 1 :(得分:0)

不能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跳转到其中心点正好位于鼠标位置的位置。

答案 2 :(得分:0)

感谢您的加入,事实证明它更简单,更简单:

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;
}