Pergunta

Eu tenho um recipiente com crianças que precisam ser substituídos por outros periodicamente.Essas crianças são sprites e eles têm um fraco referenciado ouvintes de eventos para MOUSE_DOWN evento.Quando eu chamo removeChild em crianças, numChildren do recipiente diminui a 0, mas eles ainda são visíveis em flash.Eu até tentei remover o recipiente e recriar um novo, mas ele ainda não funciona.Também tentei adicionar alguns fictício simples sprite em vez disso, sem qualquer ouvintes de evento, mas não trazer nenhum resultado.Eu presumo que o coletor de lixo não está funcionando, como eu quiser :)

Aqui é o meu código para a criação de sprites:

itemHolder=new Sprite();
addChild(itemHolder);
itemHolder.y=itemHolderY;

var itemY:Number=0;

for(var i:Number=0;i<modelBarList.bars.length;i++){
    var item:bar_list_item;
    item=new bar_list_item();
    item.name="item"+i;
    /*
    setting properties for item
    */
    itemHolder.addChild(item);              
    item.y=itemY;
    item.mouseChildren=false;
    item.buttonMode=true;
    itemY+=item.height;
    item.addEventListener(MouseEvent.MOUSE_UP,barSelected,false,10,true);
}

E o código para remoção:

while(itemHolder.numChildren){
    var item:Sprite=Sprite(itemHolder.getChildAt(0));
    item.removeEventListener(MouseEvent.MOUSE_UP,barSelected,false);
    itemHolder.removeChild(item);
    item=null;
}
removeChild(itemHolder);
itemHolder=null;
Foi útil?

Solução

Eu não acho que tenha nada a ver com o Coletor de Lixo.Você está 100% certo de que a itemHolder no segundo código é o mesmo que o itemHolder o primeiro?Talvez você pode tentar adicionar trace("Yep, this code executes") para o segundo trecho e veja se ele der certo?Que, ou o problema está em outro lugar no seu código, eu acho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top