如何做到对象池元素的跨脚本回收呢?

问题是这样的,游戏中会在Game.js中初始化arrow对象,arrow节点挂载了碰撞组件和arrow.js脚本组件,当arrow检测到碰撞时,在arrow.js中销毁。
那么如何做到在Game.js中初始化对象、在arrow.js中回收呢?

我试了在arrow.js中require(“Game.js”),但是调用的时候,说是对象池未定义。
不知道能否直接这样调用。

可以参考我的开源代码 https://github.com/Hansen-hjs/cocos-template

如果你把 game.js 挂载 Canvas 节点上,那么要使用 cc.find('Canvas').getComponent('Game'); 获取实例化后的脚本。


不过建议把对象池操作 也放到 game.js内 统一管理,
game.js 使用 director 添加监听,
cc.director.on('onNodeDestroy',this.onPutNodeToPool);
在 onPutNodeToPool 函数中处理对象池回收

arrow.js 在销毁判断时,用 director 发事件消息,把该节点传给函数
cc.director.emit('onNodeDestroy',this.node);

您说的逻辑上确实没问题!!
我也按您说的试了!

但是不知道为什么,用事件发送进行节点回收时,报错:

TypeError: Cannot read property 'arrowPool' of undefined

也就是arrowPool未定义
但是我在game.js中其他地方调用onPutArrowToPool函数,都可以成功回收节点。
报错如下图:


下面是代码:
game.js中的onLoad函数:

game.js中的onPutArrowToPool函数:

arrow.js的事件发送函数:

不知道这是为啥。。
明明arrowPool定义的好好的。。。
希望您帮忙看看!!谢谢:pray:

你这应该是上下文环境不对,在注册事件的时候把this传递进去。