将带有未完成动作或者动画的节点放到缓冲池后 使用cc.pool.getFromPool再次使用此节点时会运行残留的动画和动作,请问应该如何彻底的清除这些残留的数据?
在使用 cc.pool 的时候需要注意,需要用缓冲池管理的节点要实现 unuse 和 reuse 函数,在 unuse 中清理节点的内容(动画,动作等),在 reuse 的时候重新初始化
我在unuse里面删除了节点上带有动作的组件, 并且也停止了组件里面的动作, 但是再次使用这个节点的时候还是会运行残留的动作。 并且在浏览器中运行没有问题, 但是在模拟器中运行的时候就会有问题
动作用的是cc.cardinalSplineBy 和 cc.bezierBy
新手求助 好歹指条路啊
可以提供可重现的工程嘛?
部分代码可以么?
只要能重现即可
工程已经上传 麻烦看一下是什么问题
请问找到问题原因了么 是bug么?
还没来得及看,今天会看一下
好吧 我已经等得花儿都谢了…
你 putInPool 的是一个 EnemyBullet component,不是一个节点,在 simulator 中它所属的节点实际上已经被删除了,所以你看不到任何显示。
需要 putInPool 的是 node,另外,需要在 component onLoad 中给 node 动态添加 unuse / reuse 函数。
恩恩 搞定了 谢谢
从你的用例里面我们也发现现在的 cc.pool 不适合用来管理节点,所有节点的类型都是 cc.Node,但是他们内部的组合方式多种多样,不同的节点之间的复用很不合逻辑。所以下个版本中会提供 cc.NodePool 这个新的类,而强烈不建议继续使用 cc.pool 来管理节点(cc.pool 更适合用来做面向不同类的缓冲池)。
具体可参考:
经过测试,使用CC.POOL 复用对象。会造成内存泄漏问题。请问是否用法错误还是什么的。能给个不会泄漏的范例吗? 我这里就是每次服用对象 内存就不停增加。