Marianna
Marianna

Reputation: 129

How can i check by actionscript 3 if every items of an array had hitTestObject the items of the second array

I have this code for a drag and drop game.

How can i check by actionscript 3 if every item of an array had hitTestObject the items of the second array so something else can happens for example show a well done message.

var hitArray:Array = new Array(hitTarget1,hitTarget2,hitTarget3,hitTarget4,hitTarget5);
var dropArray:Array = new Array(drop1,drop2,drop3,drop4,drop5);
var positionsArray:Array = new Array();

for (var i:int = 0; i < dropArray.length; i++) {
    dropArray[i].buttonMode = true;
    dropArray[i].addEventListener(MouseEvent.MOUSE_DOWN, mdown);
    dropArray[i].addEventListener(MouseEvent.MOUSE_UP, mUp);
    positionsArray.push({xPos:dropArray[i].x, yPos:dropArray[i].y});
}

function mdown(e:MouseEvent):void {
    e.currentTarget.startDrag();
    setChildIndex(MovieClip(e.currentTarget), numChildren - 1);
}

function mUp(e:MouseEvent):void {

    var dropIndex:int = dropArray.indexOf(e.currentTarget);
    var target:MovieClip = e.currentTarget as MovieClip;

    target.stopDrag();

    if (target.hitTestObject(hitArray[dropIndex])) {
        target.x = hitArray[dropIndex].x;
        target.y = hitArray[dropIndex].y;
        playSound(sosto);
    }else{
        target.x = positionsArray[dropIndex].xPos;
        target.y = positionsArray[dropIndex].yPos;
    }
}

reset.addEventListener(MouseEvent.CLICK, backObjects);

function backObjects(e:MouseEvent):void{
    for(var i:int = 0; i < dropArray.length; i++){
        if(dropArray[i].x == hitArray[i].x && dropArray[i].y == hitArray[i].y){
            dropArray[i].x = positionsArray[i].xPos;
            dropArray[i].y = positionsArray[i].yPos;
        }
    }
}

function playSound(SoundName:Class):void{
    var sound = new SoundName();
    var channel:SoundChannel = sound.play();
}
playSound(sosto);

Upvotes: 1

Views: 145

Answers (2)

theseal53
theseal53

Reputation: 189

Let's create a function to tell us if every "hitTarget" and its corresponding "drop" are touching each other.

function allCorrect():Boolean {
    //for each item in the hitArray, we repeat the action
    //we assume that length of hitArray and dropArray are the same
    for (var i=0;i<hitArray.length;i++) {
        //if the corresponding target and drop do not hit each other, return false
        if (!(hitArray[i].hitTestObject(dropArray[i])) {
            return false
            //if we return false, this function will continue no further
        }
    }
    //We have cycled through all of the items in the arrays, and none of the
    //hitTestObjects have been false, so we return true
    return true
}

We want to test if everything is correct when we update the positions of our "drops". So, in your mUp function, add this line to the bottom

if (allCorrect()) {
    //display "youz a cool cat, bro"
    //remove all of your event listeners to improve performance
}

hope this answers your question!

Upvotes: 1

MNOPYZ
MNOPYZ

Reputation: 55

Try adding this line:

stage.addEventListener(Event.ENTER_FRAME, loop);

Where "loop" is a function that contains the rest of your code, which looks something like...

function loop (e:Event):void
{
//Your Code
}

Good luck!

Upvotes: 0

Related Questions