Sprites são visíveis após o removeChild é chamado de
-
14-11-2019 - |
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;
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.