2017-03-01 9 views
0

Adob​​e Animateでインタラクティブな紙の人形を作成していて、ドラッグドロップ機能を動作させるときに問題があります。私は同じエリアにドラッグされる可能性が必要な複数の衣服アイテムを持っています。たとえば、私は4つの異なるシャツオプションを持っています。私は2つのドレス(黄色のドレス_mc &青いドレス_mc)から始めました。黄色のドレスは正常に機能していますが、青いドレスは機能しません。ドラッグすることはできますが、ドロップすることはできません。助言がありますか?ActionScript 3.0でドラッグ&ドロップを作成する方法は?複数のアイテムが複数のターゲットにドラッグされている

これが今の私が持っているコードです:

var objectoriginalX:Number; 
var objectoriginalY:Number; 

flower_mc.buttonMode = true; 
flower_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject); 
flower_mc.addEventListener(MouseEvent.MOUSE_UP, dropObject); 

yellowdress_mc.buttonMode = true; 
yellowdress_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject); 
yellowdress_mc.addEventListener(MouseEvent.MOUSE_UP, dropObject); 

bluedress_mc.buttonMode = true; 
bluedress_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject); 
bluedress_mc.addEventListener(MouseEvent.MOUSE_UP, dropObject); 

function pickupObject(event:MouseEvent):void { 
event.target.startDrag(true); 
event.target.parent.addChild(event.target); 
objectoriginalX = event.target.x; 
objectoriginalY = event.target.y; 
} 
function dropObject(event:MouseEvent):void { 
event.target.stopDrag(); 
var matchingTargetName:String = "target" + event.target.name; 
var matchingTarget:DisplayObject = getChildByName(matchingTargetName); 
if (event.target.dropTarget != null && event.target.dropTarget.parent == 
matchingTarget){ 
event.target.removeEventListener(MouseEvent.MOUSE_DOWN, pickupObject); 
event.target.removeEventListener(MouseEvent.MOUSE_UP, dropObject); 
event.target.buttonMode = false; 
event.target.x = matchingTarget.x; 
event.target.y = matchingTarget.y; 
} else { 
event.target.x = objectoriginalX; 
event.target.y = objectoriginalY; 
} 
} 

答えて

1

私はドラッグオブジェクトにMOUSE_UPを使用しないことをお勧めしたいです。ほとんどの場合失敗する可能性があります。また、ドラッグされたオブジェクトを前面に持っていくことも良い考えです。

var Drugs:Array = [flower_mc, yellowdress_mc, bluedress_mc]; 

for each (var aDrag:MovieClip in Drugs) 
{ 
    aDrag.buttonMode = true; 
    aDrag.useHandCursor = true; 
    aDrag.addEventListener(MouseEvent.MOUSE_DOWN, dragObject); 
} 

var orig:Point; 
var drag:MovieClip; 

function dragObject(e:MouseEvent):void 
{ 
    drag = e.currentTarget as MovieClip; 
    orig = new Point(drag.x, drag.y); 

    // Bring to front and start drag. 
    drag.parent.setChildIndex(drag, drag.parent.numChildren - 1); 
    drag.startDrag(); 

    // Handle drop cases. 
    stage.addEventListener(Event.MOUSE_LEAVE, dropObject); 
    stage.addEventListener(MouseEvent.MOUSE_UP, dropObject); 
} 

function dropObject(e:Event):void 
{ 
    // Stop handling drop cases. 
    stage.removeEventListener(Event.MOUSE_LEAVE, dropObject); 
    stage.removeEventListener(MouseEvent.MOUSE_UP, dropObject); 

    // This event goes from stage so we will work 
    // with the "drag" reference saved earlier. 

    // Sanity check in case something went wrong 
    // and the reference is empty. 
    if (!drag) return; 

    drag.stopDrag(); 

    var aMatch:DisplayObject = getChildByName("target" + drag.name); 
    var aTarget:DisplayObject = drag['dropTarget']; 

    // This is your condition so I leave it as is. 
    if ((aTarget !== null) && (aTarget.parent == aMatch)) 
    { 
     drag.x = aMatch.x; 
     drag.y = aMatch.y; 
     drag.buttonMode = false; 
     drag.useHandCursor = false; 
     drag.removeEventListener(MouseEvent.MOUSE_DOWN, dragObject); 
    } 
    else 
    { 
     drag.x = orig.x; 
     drag.y = orig.y; 
    } 

    // Clean up. 
    drag = null; 
    orig = null; 
} 
関連する問題