问题是这样的,游戏中会在Game.js中初始化arrow对象,arrow节点挂载了碰撞组件和arrow.js脚本组件,当arrow检测到碰撞时,在arrow.js中销毁。
那么如何做到在Game.js中初始化对象、在arrow.js中回收呢?
我试了在arrow.js中require(“Game.js”),但是调用的时候,说是对象池未定义。
不知道能否直接这样调用。
如果你把 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定义的好好的。。。
希望您帮忙看看!!谢谢
你这应该是上下文环境不对,在注册事件的时候把this传递进去。


