调用removeChild后可以看到精灵

时间:2011-02-17 13:07:43

标签: actionscript-3 garbage-collection sprite removechild

我有一个带有孩子的容器需要定期更换。这些孩子是精灵,他们为MOUSE_DOWN事件提供了一个弱引用事件监听器。当我在子节点上调用removeChild时,容器中的numChildren减少到0,但它们仍然在flash中可见。我甚至试图删除容器并重新创建新容器,但它仍然无效。还尝试添加一些虚拟简单精灵,没有任何事件监听器,但它没有带来任何结果。我认为垃圾收集器没有按照我的意愿工作:)

这是我创建精灵的代码:

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 :(得分:0)

我不认为它与垃圾收集器有任何关系。您是否100%确定第二个代码中的itemHolder与第一个中的itemHolder相同?也许你可以尝试将trace("Yep, this code executes")添加到第二个片段,看看它是否肯定执行?那个,或者问题出在我认为的代码中的其他地方。