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

论技术吹牛逼,我只服你。

麻烦官方人员帮忙检查一下,非常迫切的想知道这其中的bug所在。

@panda @jare @huanxinyin

初步猜测是代码逻辑导致的。
UnitView -> initialize,
if(this._status == 0) {
this.closeActive(); //this.imgNode.active = false;
}
这里 this._status会存在为0的情况,导致 this.imgNode.active = false; 展示到页面里,就是对象创建了,但是里边的图片没有显示。

Stairs.json 文件中存在为0的情况:

虽然你不是官方人员,但是你很耐心的看了我的代码,我表示非常的感谢。

你的确抓住了问题的源头,但是,还是抱歉,你分析的不对,你还是没有完全理解代码的思路。

你指出的位置,没有任何问题。

我断点跑了一下,猜测应该正确。你可以在这个位置断点看一下:

下边的图是节点树立对应的图片active的信息,确实是false:

检查下自己的配置文件吧,少年

少年,麻烦你自己检查下你的游戏逻辑,节点在池里面的进出是没问题的,对象也没被销毁,我们没法帮你查游戏逻辑的。

大哥,你晚上不睡觉吗?我刚到公司,你这分析不对啊。

你指出的那个位置,那么简单的地方,你以为我瞎了吗??哈哈,玩笑玩笑,大哥,早点睡觉,真的不是这个地方。

来吧,加个QQ,我的QQ:195221906,麻烦加一下把。或者你给我你的QQ。我给你分析一下问题把。。哎。。

上面的各位大佬们,非常感谢你们花费宝贵的时间,不过你们分析的肯定是错误的。我不可能给你们一一讲解错误原因。我只能针对官方人员了,也希望他们把bug找出来,促进ccc引擎的完善与发展。!!

谢谢各位大神!!

我再这里补充说一下:其实问题不是cc.NodePool,因为我用一个数组模仿cc.NodePool,也是出现同样的问题。所以说,问题应该是 node.removeFromParent(false); // 这个方法有问题。

我在说一下,你发的截图是正常的,有什么好分析的。你这还没出现问题啊,我上面帖子说了,你先跑到360层再说。另外再仔细看看我发的截图。

再说一句:这是我花了半天时间写的demo,demo,demo!!!不是游戏!,一点点的逻辑都没有,完全是最大化的模拟,使得 cc.NodePool 充分的调用。请麻烦细心的看一下代码和对象池调用的地方。

还是加我QQ把,我不给你们讲解一下思路,你们肯定是不愿意花费精力去理解的。我三句话一说:你们就会明白了,简单无比的demo。

我这边只对对象池的逻辑进行的判断,节点进出没问题,如果是 node.removeFromParent(false), 是否可以解释下?我们好处理的?

问题就是我说的问题,重复利用的Node,在游戏进行到后面的时候,我上面玩到了360层开始,出现node上挂在的spriteframe丢失了。。但是赋值已经成功了,就是不显示。

上面有些大佬分析的是我配置文件的问题,他们指出的地方,我当然知道了,那里不是问题。

你看下我发的2张对比的截图,那才是真正的问题所在。

能否加个QQ或者微信,私聊一下呢?我真的确信这是bug。

我给你个分析结果,稍等一会。

好的。

如果方便,我还是建议加个QQ或者微信把?我给你说一下我的代码,我感觉必须解释一下代码,不然你们不深入看进去,的确不容易理解代码的思路。

老实讲, 如果认为真的是对象池的问题,那么你认为出现的问题的原因是什么,写一个更简单的demo应该都能重现。
就看现在的情况, 初始化加载了200个node ,然后频繁存取 ,频繁更换spriteFrame,也许会就会出现你说的情况吧,写一个函数应该都可以搞定。如果真是对象池bug,不一定非得是按照游戏里的业务逻辑才能出现的吧。

1赞

我刚刚改了下数据,只改了第一个

把“together”里的全部1,其中1个改了为0
之后发现每次隔30个,都重复了

假设节点池有BUG 而且你不用节点池就OK 你应该从资源的加载和释放下手 这2块是容易踩雷区的地方

之后去找第30个数据
发现里面的together数据全是1

而显示的是第0个的数据