[]关于Sprite回收

// 移除item
        for(var i = 0; i < this.numChildren; i++) {
            console.log(this.numChildren);
            var item = this.getChildAt(i);
            if(item instanceof Item) {
                item.removeSelf();
                item.visible = true;
                Pool.recover("item", item);
                item.graphics.clear();
            }
   item的父容器是通过回收池获取的,父容器带有原来的item,现在希望删掉原来的item,添加新的item,使用上面的代码去达不到效果,结果是原有的item和新添加的item叠在了一起,求解决!!
已邀请:

cuixueying

赞同来自:

  不明白你想干什么,如果是对象池创建,直接用Pool.recover回收掉就可以了。如果是彻底不想用了,直接调Pool.clearBySign清除对象池的对象即可。

cwugs

赞同来自:

for(var i = 0; i < this.numChildren; i++) {
            console.log(this.numChildren);
            var item = this.getChildAt(i);
            if(item instanceof Item) {
  1.                 item.removeSelf();

                item.visible = true;
                Pool.recover("item", item);
                item.graphics.clear();
            }
执行图示1. 时,会将子元素从父容器中移除,相应的numChildren的值会减少1, 而i的值一直在加,最后的结果就是没有完全移除父容器中的元素.可以在该循环后打印父容器中子元素个数就可得出答案,其实要达到笔者的目的也简单,只需要将i++去掉即可,如下
for(var i = 0; i < this.numChildren; (这里i++不要)) {
            console.log(this.numChildren);
            var item = this.getChildAt(i);
            if(item instanceof Item) {          
     item.removeSelf();
                item.visible = true;
                Pool.recover("item", item);
                item.graphics.clear();
            }

要回复问题请先

商务合作
商务合作