Спрайты видны после вызова removeChild - PullRequest
0 голосов
/ 17 февраля 2011

У меня есть контейнер с детьми, который необходимо периодически заменять другим. Эти дети являются спрайтами, и у них есть один слабый приемник событий со ссылкой на событие MOUSE_DOWN. Когда я вызываю removeChild для потомков, numChildren из контейнера уменьшается до 0, но они все еще видны во флэш-памяти. Я даже пытался удалить контейнер и воссоздать новый, но он все еще не работает. Также попытался добавить некоторый простой фиктивный спрайт, без каких-либо слушателей событий, но это не принесло никаких результатов. Я предполагаю, что сборщик мусора работает не так, как я хотел бы:)

Вот мой код для создания спрайтов:

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

и код для удаления:

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;

1 Ответ

0 голосов
/ 17 февраля 2011

Не думаю, что это как-то связано с сборщиком мусора.Вы на 100% уверены, что itemHolder во втором коде такой же, как itemHolder в первом?Возможно, вы можете попробовать добавить trace("Yep, this code executes") ко второму фрагменту и посмотреть, точно ли он выполняется?Это, или проблема кроется где-то еще в вашем коде, я думаю.

...