Skip to main content
Tjoffer
Participant
March 24, 2018
Question

Help with a drag and drop game

  • March 24, 2018
  • 1 reply
  • 249 views

Hi, I have made a game and everything is working except for my win condition which I am unable to make work. I have tried many different things to get it to work but I keep getting errors.

So I have objects that I am able to drag and drop, and when you are done, you click a button and I want it to check if all objects are in the correct spot, and in that case, you win the game, otherwise you lose.

import flash.events.Event;

attackbutton.buttonMode = true;

stop();

var startX:Number;

var startY:Number;

var counter:Number = 0;

var dropTargets:Array = [kn_12Target, kn_34Target, kn_56Target, kn_78Target, kn_910Target, kn_10Target, kn_18Target, kn_26Target, kn_34_2ndTarget, kn_10_2ndTarget, kn_17Target, kn_15Target, kn_9Target, kn_14Target, kn_14_2ndTarget];

var draggableObjects:Array = [kn_12, kn_34, kn_56, kn_78, kn_910, kn_10, kn_18, kn_26, kn_34_2nd, kn_10_2nd, kn_17, kn_15, kn_9, kn_14, kn_14_2nd];

function activateDraggables():void {

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

draggableObjects.buttonMode = true;

draggableObjects.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);

draggableObjects.addEventListener(MouseEvent.MOUSE_UP, dropIt);

draggableObjects.startX=draggableObjects.x;

draggableObjects.startY=draggableObjects.y;

}

}

activateDraggables();

function pickUp(event:MouseEvent):void {

event.currentTarget.startDrag();

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

}

function dropIt(event: MouseEvent): void {

    event.currentTarget.stopDrag();

    var hitBool: Boolean = false;

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

        if (event.currentTarget.hitTestObject(dropTargets)) {

            event.currentTarget.x = dropTargets.x;

            event.currentTarget.y = dropTargets.y;

            hitBool = true;

            break;

        }

    }

    if (!hitBool) {

        event.currentTarget.x = event.currentTarget.startX;

        event.currentTarget.y = event.currentTarget.startY;

    }

}

attackbutton.addEventListener(MouseEvent.CLICK, fl_ClickToGoToAndStopAtFrame);

function fl_ClickToGoToAndStopAtFrame(event:MouseEvent):void

{

   

gotoAndStop(2);

}

addEventListener(Event.ENTER_FRAME, hitTest);

function hitTest(evt:Event) {

if(kn_12Target.hitTestPoint(kn_12.object, kn_34.object)) {

gotoAndStop(2);

}

}

This topic has been closed for replies.

1 reply

kglad
Community Expert
Community Expert
March 25, 2018

why are you testing everything in dropIt. (hint: that's not necessary)

the below code is problematic.  what is this code supposed to do? (hint: it should probably be removed and the superfluous dropIt code used to test for a win.)

attackbutton.addEventListener(MouseEvent.CLICK, fl_ClickToGoToAndStopAtFrame);

function fl_ClickToGoToAndStopAtFrame(event:MouseEvent):void

{

 

gotoAndStop(2);

}

addEventListener(Event.ENTER_FRAME, hitTest);

function hitTest(evt:Event) {

if(kn_12Target.hitTestPoint(kn_12.object, kn_34.object)) {

gotoAndStop(2);

}

}

Tjoffer
TjofferAuthor
Participant
March 28, 2018

Ive managed to get it to almost fully work now, thank you very much.

attackbutton.addEventListener(MouseEvent.CLICK, fl_ClickToGoToAndStopAtFrame);

function fl_ClickToGoToAndStopAtFrame(event:MouseEvent):void

{

if (kn_12.hitTestObject(kn_12Target))

if (kn_34.hitTestObject(kn_34Target))

if (kn_56.hitTestObject(kn_56Target))

if (kn_78.hitTestObject(kn_78Target))

if (kn_910.hitTestObject(kn_910Target))

if (kn_10.hitTestObject(kn_10Target))

if (kn_18.hitTestObject(kn_18Target))

if (kn_26.hitTestObject(kn_26Target))

if (kn_34_2nd.hitTestObject(kn_34_2ndTarget))

if (kn_10_2nd.hitTestObject(kn_10_2ndTarget))

if (kn_17.hitTestObject(kn_17Target))

if (kn_15.hitTestObject(kn_15Target))

if (kn_9.hitTestObject(kn_9Target))

if (kn_14.hitTestObject(kn_14Target))

if (kn_14_2nd.hitTestObject(kn_14_2ndTarget))

gotoAndStop(2);

}

Do you have any tips for how I should make the objects, kn_34, kn_10 and kn_14 also work if they are located inside the _2ndTargets and vice versa for the kn_34_2nd, kn_10_2nd and kn_14_2nd objects?

That is so that it doesnt matter if they are located in either or since the numbers are identical

Thanks in advance

/ Chris

kglad
Community Expert
Community Expert
March 28, 2018

you should be using for-loops to simplify your code and make it easier to encode, debug and maintain.  if there are kn_xx with kn_xxTarget's and kn_xx_2nd with kn_xx_2ndTarget's, use:

var dd_numsA:Array = [12,34,56,78,etc]

function end_gameF():void{

var hit_num:int=0;

for(var i=0;i<dd_numsA.length;i++){

if(this['kn_'+dd_numsA].hitTestObject(this['kn_'+dd_numsA+'Target']){

hit_num++;

}

if(this['kn_'+dd_numsA+'_2nd'].hitTestObject(this['kn_'+dd_numsA+'_2ndTarget']){

hit_num++;

}

if(hit_num==2*dd_numsA.length){

gotoAndStop(2);

}

}

}