嗯,这个我知道,你说的没错。我demo这里是写的不对。我看看我正式 项目里的情况,再测一遍。
我试过缓存池对象加动画,回收前什么动画,取出来后接着放,我就知道了回收前要重置对象的状态,只是重置,又不是重新初始化
嗯,理论上我每次拿出来之前,重新初始化状态也是对的啊。
你this._unitNodePool.put(unit) 这个unit是个node ,但是recycle函数里面你put的就是个组件了(使用了getComponent)
let unitView = unitNode.getComponent(UnitView);
this._unitNodePool.put(unitNode);
不是。
我只是说 这点就有问题 没具体看其他的
官方例子 會這樣嗎
你指的360层,是循环里循环了180次,我测试时把循环给我90次了。
你设计的是不是配置文件里是0的时候,图片就是不显示的,所以你觉得我给你截图的代码没有问题。
但是,我理解的是,初始情况下为0不显示是符合你的预期的,但是当你把这个对象放回到内存中后和再次去处理啊,图片的active是不是没有设置为true?
这种情况下,就会出现虽然创建了对象了,但是没有显示出来。
比如,你配置文件中需要创建为1的对象为6个(另一个为0),按理说应该显示6个对象,但是却只显示了5个,是因为,有一个对象的图片active=false。
你每次从对象池里取出对象来,都做了初始化:
let sp = this.imgNode.getComponent(cc.Sprite);
……
但是,此时的imgNode.avtive如果已经是false了呢。。
(
之所以, 比较关注这个问题,是因为我们的游戏也遇到内存优化的问题了。。
如果事后证明我的分析是错误的,麻烦在帖子里说一下正确的思路,感谢!
)
/
这个位置,你的分析是对的。
现在的问题还没有完全解决,我还在想办法调试。
加了当然有用啊,不过现在问题不在这,原因是我的这个demo还是没有写好。我还在想办法调试找出其中的问题。
这个不错。
有问题,不过bug出现的很不规律,我还在找这个bug的规律。
多注意一下对象池拿出来的东西,把有修改过的属性恢复默认值再用。
经过我废寝忘食的连续不断的调试。,我找到项目里的问题了。这里公布一下答案,不是引擎的bug,而是我自己的一个使用错误:
1.我先使用对象池clear了所有 node;
2.父结点在执行 destroy的时候,又把上面的node put进了对象池。
所以才导致了莫名的bug。经过优化,功能已健全。
最后谢谢楼上每一位大佬对本帖的参与,感谢大佬们对我的代码提出的各种意见也非常的关键,感谢cctv,感谢cocos.
帖子题目已修正,不能误人子弟。
很好很好
请教一下, 我现在做一个单场景的游戏,场景一开始就在十几个对象池里面存放了数量不等的对象, 一共可能有350个, 不知道这样多数量的对象池和对象会对游戏运行造成影响吗?会有有多大影响?