Skip to main content
kelvinj92887548
Participating Frequently
December 10, 2016
Question

Drag and drop game sort items to three targets

  • December 10, 2016
  • 3 replies
  • 813 views

Please I need some help. I have spent 2 weeks trying to make a drag and drop game In cs4 actionscript 3.0 and am about to give up.

I have an array that looks like this

var answername:Array = new Array();

var answerdest:Array = new Array();

answername[0] = "gravel";

answerdest[0] = "1";

answername[1] = "Nuts and boltsl";

answerdest[1] = "1";

answername[2] = "water";

answerdest[2] = "2";

answername[3] = "gold";

answerdest[3] = "3";

answername[4] = "Iron";

answerdest[4] = "3";

I need three targets,

and the ability to place the name of my array (this is just a short piece of it) item on the screen if it is dropped on the target matching the answerdest number it is placed in a column, and the next item my array appears.  If not it returns to its starting position.  This seems like it should be easy to do but I am not a computer teacher I am a science teacher that is trying to make something for my student to use. I have basic coding skills for cs4.

This is as far as i have gotten but can not Figure out how to get the drag and drop part to check if it is in the correct spot. And get to to create a new drag-able  if the answer is correct.

I have created an answer target names "Answer1",

var objectoriginalX:Number;

var objectoriginalY:Number;

Atom.buttonMode = true;

Atom.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);

Atom.addEventListener(MouseEvent.MOUSE_UP, dropObject);

Matter.buttonMode = true;

Matter.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);

Matter.addEventListener(MouseEvent.MOUSE_UP, dropObject);

   function pickupObject(event:MouseEvent):void {

  event.target.startDrag();

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

  }

var dropCount:int = 0;

var dbCount:int=0;

var dbutton0;

  function dropObject (event:MouseEvent):void

{

  {

  event.target.stopDrag();

  var targetName = Answer1;

  var matchingTarget:DisplayObject = getChildByName(targetName);

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

  {

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

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

  event.target.buttonMode = false;

  alpha = .8

  dropCount ++;

  event.target.x = 10

  event.target.y = (Number(dropCount) * 100);

  trace ("hit");

 

  trace (dropCount);

  } else

  {

  event.target.x = 100;

  event.target.y = 111;

  trace ("miss");

  }

  }

}

var answername:Array = new Array();

var answerdest:Array = new Array();

answername[0] = "gravel";

answerdest[0] = "1";

answername[1] = "Nuts and bolts";

answerdest[1] = "1";

answername[2] = "water";

answerdest[2] = "2";

answername[3] = "gold";

answerdest[3] = "3";

answername[4] = "Iron";

answerdest[4] = "3";

text3

text3.text = answername[1];

var myText:TextField = new TextField();

Atom.addChild(myText);

myText.text = answername[1] ;

This topic has been closed for replies.

3 replies

Ned Murphy
Legend
December 12, 2016

You did not change all of what I said to.  Remove the lines I crossed out (read the blue text to understand why)

kelvinj92887548
Participating Frequently
December 13, 2016

those two lines have now been removed and as you said they do not seem to make any difference.

Ned Murphy
Legend
December 12, 2016

Yes, please show clean code

kelvinj92887548
Participating Frequently
December 12, 2016

var objectoriginalX:Number;

var objectoriginalY:Number;

Atom.buttonMode = true;

Atom.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);

Atom.addEventListener(MouseEvent.MOUSE_UP, dropObject);

Matter.buttonMode = true;

Matter.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);

Matter.addEventListener(MouseEvent.MOUSE_UP, dropObject);

  function pickupObject(event:MouseEvent):void

  {

  event.target.startDrag();

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

  }

  var dropCount:int = 0;

  var dbCount:int=0;

  var dbutton0;

function dropObject (event:MouseEvent):void

{

  {

  event.target.stopDrag();

  var targetName = Answer1;

  var matchingTarget:DisplayObject = getChildByName(targetName);

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

  {

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

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

  event.target.buttonMode = false;

  alpha = .8

  dropCount ++;

  event.target.x = 10

  event.target.y = (Number(dropCount) * 100);

  trace ("hit");

  trace (dropCount);

  }

  else

  {

  event.target.x = 100;

  event.target.y = 111;

  trace ("miss");

  }

  }

}

var answername:Array = new Array();

var answerdest:Array = new Array();

answername[0] = "gravel";

answerdest[0] = "1";

answername[1] = "dgravel";

answerdest[1] = "1";

answername[2] = "firewater";

answerdest[2] = "2";

answername[3] = "trywater";

answerdest[3] = "2";

answername[4] = "funwater";

answerdest[4] = "2";

text3

text3.text = answername[1];

var myText:TextField = new TextField();

Atom.addChild(myText);

myText.text = answername[1] ;

trace (answername);

kelvinj92887548
Participating Frequently
December 12, 2016

here is the code I missed one of your suggestions in the code above

var objectoriginalX:Number;

var objectoriginalY:Number;

Atom.buttonMode = true;

Atom.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);

Atom.addEventListener(MouseEvent.MOUSE_UP, dropObject);

Matter.buttonMode = true;

Matter.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);

Matter.addEventListener(MouseEvent.MOUSE_UP, dropObject);

  function pickupObject(event:MouseEvent):void

  {

  event.currentTarget.startDrag();

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

  }

  var dropCount:int = 0;

  var dbCount:int=0;

  var dbutton0;

function dropObject (event:MouseEvent):void

{

  {

  event.currentTarget.stopDrag();

  var targetName = Answer1;

  var matchingTarget:DisplayObject = getChildByName(targetName);

  if (event.currentTarget.dropTarget != null && event.currentTarget.dropTarget.parent == Answer1)

  {

  event.currentTarget.removeEventListener(MouseEvent.MOUSE_DOWN, pickupObject);

  event.currentTarget.removeEventListener(MouseEvent.MOUSE_UP, dropObject);

  event.currentTarget.buttonMode = false;

  alpha = .8

  dropCount ++;

  event.currentTarget.x = 10

  event.currentTarget.y = (Number(dropCount) * 100);

  trace ("hit");

  trace (dropCount);

  }

  else

  {

  event.currentTarget.x = 100;

  event.currentTarget.y = 111;

  trace ("miss");

  }

  }

}

var answername:Array = new Array();

var answerdest:Array = new Array();

answername[0] = "gravel";

answerdest[0] = "1";

answername[1] = "dgravel";

answerdest[1] = "1";

answername[2] = "firewater";

answerdest[2] = "2";

answername[3] = "trywater";

answerdest[3] = "2";

answername[4] = "funwater";

answerdest[4] = "2";

text3

text3.text = answername[1];

var myText:TextField = new TextField();

Atom.addChild(myText);

myText.text = answername[1] ;

trace (answername);

Ned Murphy
Legend
December 10, 2016

If you change the code to remove what I show as red/crossed-out below, it might be a start.   If I create a movieclip object and assign it an instance name in the properties panel of Atom, and then create another and assign it an instance name of Answer1, and I drag Atom and drop it on Answer1, Atom acquires the textfield with the text in it and moves to x=10/y=100.  If I drop Atom elsewhere it goes back where (I presume) it started.

  function dropObject (event:MouseEvent):void

{

  {

  event.target.stopDrag();

  var targetName = Answer1;     names are strings (with quotes), instance names are not -

  var matchingTarget:DisplayObject = getChildByName(targetName);   targetName is not a string

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

  {

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

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

  event.target.buttonMode = false;

  alpha = .8

  dropCount ++;

  event.target.x = 10

  event.target.y = (Number(dropCount) * 100);

  trace ("hit");

  trace (dropCount);

If you want to spawn the next object the place to initiate that action is here - I see no attempt to do that in the code you show so I won't suggest a solution unless you have none

  } else

  {

  event.target.x = 100;

  event.target.y = 111;

  trace ("miss");

  }

  }

   This is to be removed too.

kelvinj92887548
Participating Frequently
December 10, 2016

I have none. (no idea how to span the next element) That was as far as I got and did not know how to proceed. So a suggestion would be super great.  I tried making the suggested changes but everything come up a miss. I will keep trying thanks for trying.

Ned Murphy
Legend
December 11, 2016

Show the code as you have it now.  You might have just missed a detail of what I offered.  I would offer to send you the small file I created except it was done in CS6, so you would not be able to open it.

Also, you should change from using event.target to using event.currentTarget.      event.currentTarget points to the object that has the event listener assigned to it, while event.target can be pointing to something inside the object that the mouse is interacting with.  So you might not be checking the right elements as a result of using event.target.  I used simple shapes inside my objects (rectangles/circles), so they were less likely to interact with the mouse.  You might have symbols inside and they can be a target of the mouse.