What is the best way to do drag/drop? Should I use hit test code?

Hello,

I am trying to do a fairly simple drag/drop. I have it mostly working but when I drop the draggable object, the mouse must be directly over the target object in order for it to ‘see’ the target object. In other words, if a portion of the draggable object is over the target object when I drop it it will not see the target object UNLESS the mouse was also over the target object.

Should I use hit test code? If so does anyone have an example they can show me? I know this code needs to be cleaned up a bit but right now I just need to know how to get the entire draggable object to sense what is under it when dropped. Thanks.

Here is the code I am using.


for (var i:uint = 0; i < numbAns; i++)
 {
  var ans:TextField = new TextField();
  ans.text = loaded.draggers.dragger*;
  ans.setTextFormat(formatNormal);
  ans.autoSize = "left";
  ans.x = 5;
  ans.selectable = false;
  ansDict[ans] = loaded.draggers.dragger*. @ ansid;
  prevBoxLoc = spMainQues.y + 40;
  var boxFrame:MovieClip = new MovieClip();
  boxFrame.graphics.beginFill(0xFFFFFF);
  boxFrame.graphics.drawRoundRect(0,0, ans.width +10, ans.height, 5,5);
  boxFrame.graphics.endFill();
  boxFrame.filters = [new GlowFilter(0x999999,1,10,10,6,2,false,false)];
  boxFrame.x = (boxFrame.width/2 - boxFrame.width) + 90;
  boxFrame.y = (i * 40) + prevBoxLoc;
  boxFrame.addChild(ans);
  boxFrame.mouseChildren = false;
  boxFrame.addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
  stage.addChild(boxFrame);
 }
 for (var j:uint = 0; j < numbQues; j++)
 {
  var quest:TextField = new TextField();
  quest.text = loaded.targets.targt[j];
  quest.setTextFormat(formatBig);
  quest.width = spMainQues.width - 50;
  quest.autoSize = "left";
  quest.wordWrap = true;
  quest.x = 5;
  quest.selectable = false;
  quesDict[quest] = loaded.targets.targt[j]. @ quesid;
  var boxFrameQ:MovieClip = new MovieClip();
  boxFrameQ.graphics.beginFill(0xFFFFFF, 0);
  boxFrameQ.graphics.drawRoundRect(0,0, quest.width +10, quest.height, 10,10);
  boxFrameQ.graphics.endFill();
  boxFrameQ.x = 15;
  boxFrameQ.y = prevQuesY + prevQuesHght + 15;
  prevQuesHght = boxFrameQ.height;
  prevQuesY = boxFrameQ.y;
  boxFrameQ.addChild(quest);
  boxFrameQ.mouseChildren = false;
  this.spMainQues.addChild(boxFrameQ);
 }



function startDragging(evt:MouseEvent):void
{
 evt.target.removeEventListener(MouseEvent.MOUSE_DOWN, startDragging);
 origLocatX = evt.target.x;
 origLocatY = evt.target.y;
 evt.target.startDrag(false);
 evt.target.parent.addChild(evt.target);
 evt.target.addEventListener(MouseEvent.MOUSE_UP, onDrop);
}
var corrQuestIndex:uint = 0;
var wrngQuestIndex:uint = 0;
function onDrop(evt:MouseEvent):void
{
 evt.target.removeEventListener(MouseEvent.MOUSE_UP, onDrop);
 evt.target.addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
 evt.target.stopDrag();
 evt.target.x = origLocatX;
 evt.target.y = origLocatY;
  if (quesDict[evt.target.dropTarget] == ansDict[evt.target.getChildAt(0)] && evt.target.dropTarget != null)
 {
  quesLocCorr[corrQuestIndex] = evt.target.dropTarget.parent.y + spMainQues.y;
  trace(evt.target.dropTarget);
  trace("That is the correct answer!!!!");
  corrQuestIndex++;
 }
 else if(evt.target.dropTarget.toString() == "[object TextField]" && evt.target.dropTarget != null)
 {
  quesLocWrng[wrngQuestIndex] = evt.target.dropTarget.parent.y + spMainQues.y;
  wrngQuestIndex++;
 }
}