拖放只允许每个目标有一个对象



我确定这很简单,但我有运行良好的拖放代码......但是,它允许我为每个目标丢弃多个对象。我想要的是每个目标只允许一个对象,我已经查看并且似乎找不到如何测试以查看对象是否已被丢弃。这是我的代码:

package com {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.geom.Point;
import com.greensock.*;
public class DraggableObject extends MovieClip 
{
    protected var origPos:Point;
    public function DraggableObject() 
    {
        origPos = new Point(x, y);
        buttonMode = true; // changes cursor to hand
        addEventListener(MouseEvent.MOUSE_DOWN, down);
    }

    protected function down (event:MouseEvent): void
    {
        parent.addChild(this); // adds object to the top of the display list to keep the object on top
        startDrag(); // built in Flash method
        stage.addEventListener(MouseEvent.MOUSE_UP, stageUp);
        var upPosX = x + 5;
        var upPosY = y - 5;
        TweenMax.to(this, .2, {dropShadowFilter:{color:0x666666, alpha:1, blurX:12, blurY:12, distance:12}});
        TweenLite.to(this, .2, {x: upPosX, y: upPosY});
        mouseEnabled = false;
    }
    protected function stageUp (event:MouseEvent): void 
    {
        stage.removeEventListener(MouseEvent.MOUSE_UP, stageUp); // good coding
        stopDrag(); // built in Flash method
        TweenMax.to(this, .5, {dropShadowFilter:{color:0x666666, alpha:0, blurX:12, blurY:12, distance:12}});
         if (dropTarget.parent.name == "root1"){
                returnToOrigPos();
        } 
            else if(dropTarget)// dropTarget is a built in property this means if dropTarget != null
        {
            trace("dropt on "+dropTarget.parent.name);
            x = dropTarget.parent.x;
            y = dropTarget.parent.y;
            //buttonMode = false; //only use these to keep the user's selection...can't change if these are active.
            //removeEventListener(MouseEvent.MOUSE_DOWN, down);
        } 
        mouseEnabled = true;
    }
    protected function returnToOrigPos(): void 
    {
            x = origPos.x;
            y = origPos.y;
    }
}

我以为hitTestObjectdropTarget可以工作,但不知道如何使用它们。

感谢您的任何帮助!话筒

将公共属性(例如:_hasDroppedObject)添加到要放入对象的任何类型对象中,并在将对象放入其中时将其设置为 true:

dropTarget.hasDroppedObject = true;

然后将"if (dropTarget.parent.name == "root1")"行更改为:

if (dropTarget.parent.name == "root1" || dropTarget.hasDroppedObject) {

(这假设您有权访问丢弃接收类)。

最新更新