0

我一直在尝试创建一个拖放式应用程序并遇到了障碍。我有一组将被拖入数组的影片剪辑。当我拖动它们时,我希望它们也可以,

A)如果掉落时没有目标,则弹回原始位置(工作)

B)如果检测到一个目标,则捕捉到目标(不工作)

如果可能的话,这会很好,但现在没有必要。

C) 如果目标是另一个可拖动的影片剪辑,则与目标切换位置

我将所有可拖动影片剪辑放在一个数组中,将所有“目标”影片剪辑放在另一个数组中。当我将 MC 放到一个目标上时,它只有在我在代码中指定了该目标时才有效,

(dragBox[0])

或者如果目标是数组中的最后一个。这是我目前拥有的代码。

var startX:Number = 0;
var startY:Number = 0;

var dropBoxes:Array = [/*list of dropBoxes*/];
var dragBoxes:Array = [/*list of dragBoxes*/];

for each (var dragBox_mc:MovieClip in dragBoxes){
    dragBox_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickIt);
    dragBox_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);
}

function pickIt(evt:MouseEvent):void {
    var objTarget = evt.target;
    objTarget.parent.addChild(objTarget);
    objTarget.startDrag();
    startX = objTarget.x;
    startY = objTarget.y;
}

function dropIt(evt:MouseEvent):void {
    var objTarget = evt.target;
    var target = evt.target.dropTarget;
    if (target != null && target.parent == (dropBoxes[0])){
        trace ("Dropped")
        objTarget.x = (dropBoxes[0]).x;
        objTarget.y = (dropBoxes[0]).y;
    }else{
        trace ("Returned")
        objTarget.x = startX;
        objTarget.y = startY;
    }
    objTarget.stopDrag();
}

所以基本上我如何让它一次识别数组中的所有影片剪辑,而不是一次只识别一个?

谢谢

在 Kodiak 的帮助下,我完全按照自己的意愿完成了这项工作,非常感谢他!这是我最终得到的,以防其他人需要它。

function dropIt(evt:MouseEvent):void {
    var objTarget = evt.target;
    var target = evt.target.dropTarget; 
    // Drop dragBox onto dropBox
    if (target != null && dropBoxes.indexOf(target.parent) != -1){
        trace ("Dropped")
        objTarget.x = target.parent.x;
        objTarget.y = target.parent.y;
    // Switch dragBox with another dragBox
    }else if (target != null && dragBoxes.indexOf(target.parent) != -1){
        trace ("Switched")
        objTarget.x = target.parent.x
        objTarget.y = target.parent.y
        target.parent.x = startX
        target.parent.y = startY
    // If no target return to original position
    }else{
        trace ("Returned")
        objTarget.x = startX;
        objTarget.y = startY;
    }
    objTarget.stopDrag();
}
4

1 回答 1

0

如果您想确定一个项目是否在数组中,您可以使用该Array.indexOf方法。

var objTarget = evt.target;
var target = evt.target.dropTarget;
if (target != null && dropBoxes.indexOf(target.parent) != -1)
{
   //...
}

indexOf如果该项目不在该项目Array的第一个索引或第一个索引中,则返回 -1。

于 2013-05-31T08:52:18.030 回答