【已解决】关于对象池的管理!

你先把回复的帖子看一遍。

我顺便改个标题。

你说的很对,所以引擎底层bug了。哈哈

1赞

其实 看下cocos对象池实现 应该可以推测出来问题不在对象池,如果对象池出问题,那应该是removeFromParent出现问题了,那论坛早都有类似的问题出现了。当然也有可能真是个bug =。=

很大可能是使用不当的问题,结果看引擎组的分析吧

你发的那个,我都不知道你想表达什么?

我可以肯定的跟你说,不是配置的文件的问题,什么1和0的意义,我当然知道,而且比你更清楚。

我知道不是配置的问题,1表示显示,0表示隐藏,我只想说为何第30个数据全是1,结果显示出来的却和第0个数据一样

我给张第90个的数据给你吧

明明数据里面是显示6个,结果还是显示5个,显示缺的是第0组的那个数据的

也许是你复现了我所指出的bug把。我不知道。

我现在也在等官方的回复。

看到缺的那个吗,就是我第一次改的那个位置

很有规律,每30层

大哥,你别给我分析了。

我自己的东西,我还不了解吗?

你可以研究一下其中的问题所在,然后在来分析一下,可以吗

我也遇到过这样诡异的bug,不用线程池就半点问题没有。
就是node挂在的js组件里面的引用错乱问题,非常的费解,到现在都还是没有解决,明明对从对象池中取出来的数据重新赋值了,然后通过console.log(node)和console.log(node.getComponent(“js”))两个打印都是可以看到js文件里面的对象值的,奇迹发生了,两个打印出来的js里面我赋值进去的对象,不一样不一样,后面直接放弃牺牲性能用cc.insta…
@lvjun0565

我只想说你回收的时候,把东西重置了吗

你的问题,不予置评。谢谢,哈哈

回收的时候不需要重置,因为当下次拿的时候,会重新执行初始化。

如果你从池里取出一个对象,是否确认100%会去设置纹理,如果是100%的确认,那么你需要分析下楼上这个问题。

我把你的 ItemCount = 30改为了2

你就会发现你每次都是重复第0个的数据

看到没

你的node是不显示的,你回收的时候本来设置了不显示,你取出来的时候你又没设置它显示

你为何不在这里

let sp = this.imgNode.getComponent(cc.Sprite);

后面设置sp的node为显示
加上一句会怎样么
sp.node.active = true;

都说了回收前重置一下,你走的初始化是你自己写的初始化方法吧,和上面的null无关

我自己再看一下代码,可能还需要一些更多的模拟测试。

缓存池,不是缓存对象么,你存之前什么状态,取出来就什么状态,不然叫什么缓存

你这个位置是没错的。我自己刚刚也发现了。

这是我这个demo这里写的不对。这样的话,我这个demo还要完善一下。我先再我的正式项目里,再测一遍流程,看看是不是这里的问题。