Drag and drop game sort items to three targets

81 Views Asked by At

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 gotten help so far, but the best suggestion I got was try and start from scratch instead of decompiling someone else's work. so here it is 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 the item in my array (this is just a short piece of it) on the screen, if it is dropped on the target matching the answerdest number tor that item 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 named "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;
        trace (targetName);
        var matchingTarget:DisplayObject = getChildByName(targetName);
        if (event.target.dropTarget != null && event.target.dropTarget.parent == answerdest[1])
        {
            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 boltsl";
answerdest[1] = "Answer1";
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] ;

Thanks for your help. I do not know if I am even on the correct track to do what I need it to do.

1

There are 1 best solutions below

1
Neal Davis On

partial answer

var answername:Array = new Array();
var answerdest:Array = new Array();
answername[0] = "gravel";
answerdest[0] = "1";
answername[1] = "Nuts and boltsl";
answerdest[1] = "Answer1";
answername[2] = "water";
answerdest[2] = "2";
answername[3] = "gold";
answerdest[3] = "3";
answername[4] = "Iron";
answerdest[4] = "3";
text3
text3.text = answername[1];

This is pretty messy. I'm going to show a slightly better way. Even my method here isn't the best, but it's similar enough to what you are doing to not be hard to adopt.

var answer:Array = [
    {_name:"gravel",dest:"1"},
    {_name:"Nuts and bolts",dest:"Answer1"},
    {_name:"water",dest:"2"},
    {_name:"gold",dest:"3"},
    {_name:"Iron",dest:"4"}
];
text3 // what is this supposed to do? I didn't get rid of it. But just a string sitting in the middle of your code should be throwing an error. I'd get rid of it. 
//text3.text = answername[1]; // now we have a better way!
text3.text = answer[1]._name;

I know this doesn't directly help solve your problem but let's clean up your code and eventually we will figure it out. I just couldn't explain this in just a comment.

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;
         trace (targetName);
         var matchingTarget:DisplayObject = getChildByName(targetName);
         if (event.target.dropTarget != null && event.target.dropTarget.parent == answer[1].dest) // red flag here! 
//dest is a String and .parent is a MovieClip. 
//They can never be equal. This block of code would never run like this. 
        {
            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 answer:Array = [
    {_name:"gravel",dest:"1"},
    {_name:"Nuts and bolts",dest:"Answer1"},
    {_name:"water",dest:"2"},
    {_name:"gold",dest:"3"},
    {_name:"Iron",dest:"4"}
];
text3.text = answer[1]._name;

var myText:TextField = new TextField();
Atom.addChild(myText);
myText.text = answer[1]._name;