AS3如何取回被拖动到Item的对象

时间:2015-10-23 11:43:12

标签: actionscript-3 flash drag-and-drop

我有16个对象(MovieClip),每个对象都有一个唯一的实例名称(slot1-16)。 我正在尝试拖放代码,返回拖动对象的实例名称。

function fl_ReleaseToDrop(evt:MouseEvent):void {
    var object = evt.currentTarget;
    if(object is textBox || object is UILoader)
    {   
        for(var i:int = 1; i < 16; i++){
            //Checks the correct drop target
            if (object.hitTestObject(getChildByName("slot" + i))) 
            {
                trace("slot" + i);
                slot(getChildByName("slot" + i)).gotoAndStop(3);
            }else{
                object.x = xPos; //If not, return the clip to its original position
                object.y = yPos;
            }
        }

        object.stopDrag();
    }
}

真正发生的事情是我可以拖入的唯一地方是slot1,其他插槽无效。

1 个答案:

答案 0 :(得分:0)

在当前代码中,如果使用slot1对象的第一次命中测试失败,则将拖动的对象返回到其原始位置,当然所有与其他插槽的命中测试都将失败。

所以你应该在对所有对象进行命中测试后将对象返回到原始位置。例如,您可以使用布尔值来了解是否至少有一个成功的命中测试,在这种情况下,您不需要将拖动的对象返回到其原始位置:

function fl_ReleaseToDrop(evt:MouseEvent):void 
{
    var object = evt.currentTarget;
    var hit_test:Boolean = false;

    if(object is textBox || object is UILoader)
    {   
        for(var i:int = 1; i < 16; i++)
        {           
            if (object.hitTestObject(getChildByName("slot" + i))) 
            {
                hit_test = true;
                slot(getChildByName("slot" + i)).gotoAndStop(3);
            }
        }
        if(!hit_test)
        {                   
            object.x = xPos;
            object.y = yPos;
        }           
        object.stopDrag();
    }
}

希望可以提供帮助。