关于使用对象池 创建子弹 进行碰撞测试问题

代码图1,是初始化5颗子弹,放入对象池中。使用定时器(schedule)每5秒进行一创建。
如果对象对象池中有对象,从对象池获取,并且把当前组件作为参数传递进入对象池。方便对象池进行reuse时调用。


代码图2时子弹组件,载入时执行移动动作。如果子弹碰撞到物体。就把当前节点从对象池中删除。
也就是实现子弹不断的碰撞物体,碰到物体后子弹自动消失

遇到的问题是,运行后创建了三个子弹后就会卡住,监听对象池发现,对象池的数量在逐渐的递减。并没有像我设计的那样,创建时从5个变成4个,进行碰撞后节点被put进行对象池。由4个又变成5个。

请帮忙解答一下,是否是我对对象池的理解有问题。

在一开始创建5个子弹的时候有把poolManager设给子弹的poolManager么,你可以看下碰撞时pollManager是不是空的。

获取的时候 bullet = this.bulletPool.get();这里不传入self作参数
碰撞后,this.poolManager.push(self.node);,这里的this.poolManager 是否等于上面的 this.bulletPool,放入对象池的self.node 是否等于 bullet,

您好,如果我不在pool脚本中获取时,get( self )传入参数,我如何在bullet节点 reuse时获取到pool脚本里缓冲池呢? 我在pool脚本里打印了bullet节点的uuid,在碰撞中也获取到self.node的uuid。两个uuid数都相同。

不是空的,又内容的

可以参考下官方的示例代码
https://github.com/cocos-creator/example-cases/tree/master/assets/cases/05_scripting/12_pool

1赞