as3 hitTestObject не работает через некоторое время

Итак, это код, о котором идет речь:

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;
        }
    }

Это одна из функций moveX в моем коде, у всех одна и та же проблема. Таким образом, эта функция отлично работает в начале программы (игры), однако после игры в течение мегабайт 30 секунд или минуты hitTestObject () просто перестает работать, и моя игра просто теряет все элементы игрового процесса.

Таким образом, рассматриваемый код является оператором if в конце функции, но я подозреваю, что цикл mby a for также может быть проблемой, однако оператор if над оператором hitTest (проверьте, находится ли obs вне стадии ...) работать нормально.

Эта ошибка сводит меня с ума, я разработал целую игру с этой ошибкой, и теперь пришло время избавиться от нее, я не могу найти никого с такой же проблемой, и у меня никогда не было этой проблемы раньше.

код запускается в AIR для Android, и все это разработано в Adobe Flash Pro cs6


person Dominiko    schedule 01.07.2013    source источник


Ответы (2)


Попробуйте изменить этот код на следующий:

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;
        }
    }
}
person jfgi    schedule 01.07.2013
comment
Спасибо за помощь, ваш код на самом деле не работал, объекты больше не отображались на экране (думаю, они будут удалены оператором if), поэтому я включил hitTestObject в цикл for, но исключил оператор staheHeight if и оставил его там, где он был, это решило проблему. Спасибо! - person Dominiko; 01.07.2013

Проблема была решена путем изменения кода на следующий (идея пришла от @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);
        }
    }

Спасибо @jfgi!

person Dominiko    schedule 01.07.2013
comment
Вы можете поблагодарить jfgi, убедившись, что выбрали правильный ответ. - person bandaro; 02.07.2013