2015-10-23 34 views
0

的物体我拥有16个物体(动画剪辑)的棋盘,每个物体都有唯一的实例名称(slot1-16)。 我试图做一个拖放代码,它返回拖动它的对象的实例名称。AS3我怎样才能找回被拖动到物品

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,其他插槽不工作。

回答

0

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

因此,您应该在对所有对象进行命中测试后,将对象返回到其原始位置。您可以使用,例如,布尔VAR知道,如果有至少一个打得手测试,在这种情况下,你不需要你拖动的对象返回到原来的位置:

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

希望能帮帮我。

+0

首先,它的工作。但是,并不完美。因为我所有的目标插槽都是4X4的舞台,所以我不能放下我正在拖到插槽上的物品(他的侧面碰到了其他插槽),然后他改变了他触摸的所有插槽的框架而不仅仅是我的意思。 – Aviway

+0

@Aviway所以你应该指定你的意思,并进行命中测试。 – akmozo

+0

如何指定插槽? – Aviway