如题,如果我cc.instantiate 一个新的Node,如何在不addChild加入显示列表的情况下让节点及其子节点初始化?例如弹出框,我new出来后,如果弹出框里面的节点多,在弹出来的瞬间会明显感觉很卡顿,我的想法是是否可以在弹出来之前先初始化,然后弹出来的时候就不会卡顿
new nodePool()?
创建一个父类脚本, 每个node创建一个继承该脚本的脚本,将脚本加在node上,父类脚本实现初始方法。eg:
BaseUI init(data){// do something}
let node = cc.instantiate(XX);
let ui :BaseUI = node.getComponent(“BaseUI”);
ui.init(XX);
不是这个意思,我的意思是,cocos的节点你即使new出来后,只要没有加入到显示列表,也就是没有显示来,那么就不会真的算初始化
addChild操作没法避免~
let newPop = cc.instantiate(this.singlePop)
newPop.active = false
this.node.addChild(newPop)
this.scheduleOnce(() => {
newPop.active = true
newPop.getComponent(XXX).Show()
}, delay)
这样应该可以
内存池初始化方法就是你说的这样,可以先生成,生成时不被addChild,需要的时候再添加。摧毁的时候不要Destroy,用removeFromParent。
需要注意的是,这样创建的节点虽然没有加入场景,但也是需要占内存的,需要自己管理内存,真正摧毁的时候还是一样用Destroy。