Question

so, this is the code in question:

function moveObsticle():void
    {
        //move
        var tempObs:MovieClip;
        for(var i:int = obsticles.length-1; i>=0; i--)
        {
            tempObs = obsticles[i];
            tempObs.y = tempObs.y - playerSpeed;
        }

        //test if obsticle is off-stage and set it to remove
        if (tempObs != null && tempObs.y < stage.stageHeight)
        {
            removeObsticle(i);
        }

        //player-obsticle colision
        if (tempObs != null && tempObs.hitTestObject(player))
        {
            gameState = STATE_END;
        }
    }

This is one of moveX functions in my code, they all have the same problem. So this function works perfectly at the begining of the program (game) however after playing a game for mby 30sec or a minute the hitTestObject() just stops working and my game just looses all its gameplay elements.

So the code in question is an if statement at the end of a function, but Im suspecting that mby a for loop might also be a problem, however the if statement above the hitTest one (test if obs is off stage...) does work just fine.

This error is driving me crazy, Ive developed a whole game with that error and now its time to get rid of it, I cant find anybody having a same issue and I have never had that issue before.

code is ran in AIR for Android and the whole thing is developed in Adobe Flash Pro cs6

Was it helpful?

Solution

Try changing this code to following:

function moveObsticle():void
{
    //move
    var tempObs:MovieClip;
    for(var i:int = obsticles.length-1; i>=0; i--)
    {
        tempObs = obsticles[i];
        tempObs.y = tempObs.y - playerSpeed;

        //test if obsticle is off-stage and set it to remove
        if (tempObs != null && tempObs.y < stage.stageHeight)
        {
            removeObsticle(i);
            continue;
        }

        //player-obsticle colision
        if (tempObs != null && tempObs.hitTestObject(player))
        {
            gameState = STATE_END;
        }
    }
}

OTHER TIPS

The problem was resolved by changing the code to the following (Idea came from @jfgi):

function moveObsticle():void
    {
        //move
        var tempObs:MovieClip;
        for(var i:int = obsticles.length-1; i>=0; i--)
        {
            tempObs = obsticles[i];
            tempObs.y = tempObs.y - playerSpeed;

             //player-obsticle colision
             if (tempObs != null && tempObs.hitTestObject(player))
            {
            gameState = STATE_END;
            }
        }

        //test if obsticle is off-stage and set it to remove
        if (tempObs != null && tempObs.y < stage.stageHeight)
        {
            removeObsticle(i);
        }
    }

Thanks @jfgi!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top