Skip to main content
danielleduet
Known Participant
September 19, 2010
Question

HELP! Why does my Drag and Drop not work Completely?

  • September 19, 2010
  • 2 replies
  • 1120 views

Hello! I'm working on an ActionScript 3 movie clip in Adobe Flash. In the interactive movie I want the user to create a snowman with the parts on the left side. (Picture below.)

On the right side I have the snowman slightly visible, so the user knows where to put the parts. Most of it seems to work... but after I put on the body, hat, and arms the other pieces don't work; like the eyes, nose, mouth, etc. Why does it not work? Can someone help me?

This is how it should look at the end, when the user complets it.

I think I coded this correctly. But I'm not sure. Please take a look at my code and see what the problem is. Thanks!!!

var startX:Number;

var startY:Number;

var counter:Number = 0;


SNOWMAN1_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);

SNOWMAN1_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);

SNOWMAN2_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);

SNOWMAN2_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);

SNOWMAN3_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);

SNOWMAN3_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);

LEFTARM_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);

LEFTARM_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);

HAT_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);

HAT_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);

RIGHTARM_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);

RIGHTARM_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);

SCARF_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);

SCARF_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);

EYES_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);

EYES_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);

MOUTH_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);

MOUTH_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);

CARROT_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);

CARROT_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);

COLE1_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);

COLE1_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);

COLE2_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);

COLE2_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);

COLE3_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);

COLE3_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);


function pickUp(event:MouseEvent):void {

event.target.startDrag(true);

MYTEXTBOX.text = "";

event.target.parent.addChild(event.target);

startX = event.target.x;

startY = event.target.y;

}

function dropIt(event:MouseEvent):void {

event.target.stopDrag();

var myTargetName:String = "T" + event.target.name;

var myTarget:DisplayObject = getChildByName(myTargetName);

if (event.target.dropTarget != null && event.target.dropTarget.parent == myTarget){

MYTEXTBOX.text = "Good Job!";

event.target.removeEventListener(MouseEvent.MOUSE_DOWN, pickUp);

event.target.removeEventListener(MouseEvent.MOUSE_UP, dropIt);

event.target.buttonMode = false;

event.target.x = myTarget.x;

event.target.y = myTarget.y;

counter++;

} else {

MYTEXTBOX.text = "Try Again!";

event.target.x = startX;

event.target.y = startY;

}

if(counter == 13){

        MYTEXTBOX.text = "Congrats, you're finished!";

    }

}


SNOWMAN1_mc.buttonMode = true;

SNOWMAN2_mc.buttonMode = true;

SNOWMAN3_mc.buttonMode = true;

LEFTARM_mc.buttonMode = true;

HAT_mc.buttonMode = true;

RIGHTARM_mc.buttonMode = true;

SCARF_mc.buttonMode = true;

EYES_mc.buttonMode = true;

MOUTH_mc.buttonMode = true;

CARROT_mc.buttonMode = true;

COLE1_mc.buttonMode = true;

COLE2_mc.buttonMode = true;

COLE3_mc.buttonMode = true;

This topic has been closed for replies.

2 replies

kglad
Community Expert
Community Expert
September 19, 2010

use the trace() function to see if myTarget is what you always expect.

Inspiring
September 19, 2010

Below is a more efficient code. I am not sure about chasing parents you do in the code (always bad idea) so this code may be buggy:

var startX:Number;
var startY:Number;
var counter:Number = 0;
// reference to currently dragged object
var currentTarget:Sprite;
var objectCollection:Array = [SNOWMAN1_mc, SNOWMAN2_mc, SNOWMAN3_mc, LEFTARM_mc, HAT_mc, RIGHTARM_mc, SCARF_mc, EYES_mc, MOUTH_mc, CARROT_mc, COLE1_mc, COLE2_mc, COLE3_mc];


activateObjects();
function activateObjects():void {
     for (var i:int = 0; i < objectCollection.length; i++) {
          currentObject = objectCollection as Sprite;
          currentObject.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
          currentObject.buttonMode = true;
     }
}

function pickUp(event:MouseEvent):void {
     currentTarget = event.currentTarget as Sprite;
     currentTarget.startDrag(true);
     MYTEXTBOX.text = "";
     currentTarget.parent.addChild(currentTarget);
     startX = currentTarget.x;
     startY = currentTarget.y;
     stage.addEventListener(MouseEvent.MOUSE_UP, dropIt);
}

function dropIt(event:MouseEvent):void {
     stage.removeEventListener(MouseEvent.MOUSE_UP, dropIt);
     stopDrag();
     var myTarget:DisplayObject = getChildByName("T" + currentTarget.name);
     if (currentTarget.dropTarget != null && currentTarget.dropTarget.parent == myTarget){
          MYTEXTBOX.text = "Good Job!";
          currentTarget.removeEventListener(MouseEvent.MOUSE_DOWN, pickUp);
          currentTarget.buttonMode = false;
          currentTarget.x = myTarget.x;
          currentTarget.y = myTarget.y;
          counter++;
     } else {
          MYTEXTBOX.text = "Try Again!";
          currentTarget.x = startX;
          currentTarget.y = startY;
     }
     if (counter == 13) MYTEXTBOX.text = "Congrats, you're finished!";
     currentTarget = null;
}

danielleduet
Known Participant
September 19, 2010

Ok. I put the code in, but this part is giving me errors. I'm not sure what you did. I'm new to ActionScript, so I don't really know that much about it. But the bold part below is not working.

activateObjects();

function activateObjects():void {

     for (var i:int = 0; i < objectCollection.length; i++) {

          currentObject = objectCollection as Sprite;

          currentObject.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);

          currentObject.buttonMode = true;

     }

}

Inspiring
September 19, 2010

What's the error? Enable debugging in publish settings - it will show the line at fault and post full error text along with the line that is responsible for it.