AS3:数组中的影片剪辑被放置在另一个阵列中的影片剪辑中

时间:2013-05-30 19:58:13

标签: arrays actionscript-3 movieclip

我一直在尝试创建一个拖放式应用程序,并遇到了障碍。我有一组将被拖入数组的动画片段。当我拖动它们时,我想要它们,

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

1 个答案:

答案 0 :(得分:0)

如果您想知道某个项目是否在数组中,您可以使用Array.indexOf方法。

var objTarget = evt.target;
var target = evt.target.dropTarget;
if (target != null && dropBoxes.indexOf(target.parent) != -1)
{
   //...
}
如果项目不在indexOf或项目的第一个索引(如果是),则

Array返回-1。