我一直在尝试创建一个拖放式应用程序并遇到了障碍。我有一组将被拖入数组的影片剪辑。当我拖动它们时,我希望它们也可以,
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();
}