ActionScript 3.0 Удаление массивов / chillds после перехода к следующему кадру - PullRequest
0 голосов
/ 10 ноября 2011

Что у меня есть:

var ster:Array;
ster = new Array();

stage.addEventListener(Event.ENTER_FRAME, groente);

function groente(event:Event)
{
    if(Math.round(Math.random()*140) == 1)
    {
            ster.push(new groente1_MC());
            addChild(ster[ster.length-1]);
            ster[ster.length-1].x = machine.x
            ster[ster.length-1].y = machine.y 
            ster[ster.length-1].scaleX = 0.2;
            ster[ster.length-1].scaleY = 0.2;
    }
    for(var i:int = 0; i < ster.length-1; i++)
    {
            ster[i].y = ster[i].y + 5;
            if( hero.hitTestObject(ster[i]) ) {
                ster[i].visible = false;
                score = score +1;
                Score.text = ""+ score;

            }
    }
}   

Теперь проблема в том, чтобы перейти к следующему кадру. Я все еще могу видеть groente1_MC. И еще больше нерестится на моей сцене. Как я могу удалить все это и перестать порождать их после перехода к следующему кадру?

Ответы [ 2 ]

2 голосов
/ 11 ноября 2011

Вам необходимо удалить прослушиватель ENTER_FRAME, чтобы остановить перемещение и создание объектов, а затем выполнить цикл, когда массив удаляет каждый объект со сцены перед очисткой массива:

function clearStage():void
{
    stage.removeEventListener(Event.ENTER_FRAME, groente);
    for each(var mc:groente1_MC in ster) {
        removeChild(mc);
    }
    ster = [];
}
1 голос
/ 10 ноября 2011

try

for(var i:int = ster.length -1; i >= 0; i--)
{
        ster[i].y = ster[i].y + 5;
        if( hero.hitTestObject(ster[i]) ) {
            ster[i].visible = false;
            score = score +1;
            Score.text = ""+ score;
            removeChild(ster[i]);
            ster.splice(i, 1);
        }
}

пример:

            var ar:Array = [0,1,2,3,4,5,6,7,8,9,10]
            for(var i:int = ar.length - 1; i >= 0; i--){
                if(i % 2 == 0){                        
                    tf.text +=  i + ' : ' + ar[i] + '\n';                    
                    ar.splice(i,1);
                }
            }
            tf.text += 'so : ' + ar.join(', ');

tf.text is

10: 108: 86: 64: 42: 20: 0итак: 1, 3, 5, 7, 9

...