Action Script 3.0:使用 hittestobject 停止拖动

Action Script 3.0: Stop Drag with hittestobject

如何使用 hittestobject 停止拖动(事件)对象。谢谢。

object.addEventListener(TouchEvent.TOUCH_BEGIN, drag);
object.addEventListener(TouchEvent.TOUCH_END,drop);
addEventListener(Event.ENTER_FRAME, loop);

function drag(e:TouchEvent):void {
  e.target.startTouchDrag(e.touchPointID);
}
function drop(e:TouchEvent):void {
  e.target.stopTouchDrag(e.touchPointID);
}
function loop(e:Event):void {
  if (object.hitTestObject(collision)) {
    //code to stop drag event?
  }
}

或者除了 function drop 之外,还有其他方法可以停止拖动事件吗?

抱歉我的英语不好。

//已编辑

在函数 drop() 中 e.target 是当前处理事件的对象。在函数 loop() 中,您还有一些对象。不清楚它们中的哪一个在拖动,但您应该调用 object.stopTouchDrag() 或 collision.stopTouchDrag()。

更新

startTouchDrag 和 stopTouchDrag 函数都有一个参数 - touchPointID,它用于确定处理的(许多)触摸点。停止拖动时,您需要使用与启动拖动相同的 touchPointID。从非事件上下文调用 stopTouchDrag 时,您无法知道它应该使用哪个触摸点。所以你需要以某种方式记住它。如果您的目标对象是 MovieClip,您只需向其添加动态 属性 并在其中保存 touchPointID:

function drag(e:TouchEvent):void {
  (e.target as MovieClip).touchPointID = e.touchPointID; 
  e.target.startTouchDrag(e.touchPointID);
}

function loop(e:Event):void {
   if (object.hitTestObject(collision)) {
      object.stopTouchDrag(object.touchPointID);
   }
}