cc.instantiate 并未克隆节点?

现在做到优化,很多坑要爬,做了一个map来存储不同类型节点,需要的时候 cc.instantiate出来,但发现 cc.instantiate并没有克隆?而是引用?
var nodesMap = new Map();
export var cloneBuildNode = function (buildID) {
if (nodesMap.get(buildID)){
let cpNode = cc.instantiate(nodesMap.get(buildID));
return cpNode;
}
return null;
};
export var addToNodeLibray = function (buildID,building) {
if (nodesMap.get(buildID)==null){
nodesMap.set(buildID,building);
}
};

没人吗,在线等

真的是在线等哦。。

cc.instantiate并没有返回克隆对象?而是直接返回引用,导致所有的同一id的对象都是一个

(Instantiate 时,function 和 dom 等非可序列化对象会直接保留原有引用,Asset 会直接进行浅拷贝,可序列化类型会进行深拷贝。)
@param original An existing object that you want to make a copy of.
解决了,function会保留引用

ccclass继承自 cc.node,怎么样才能让Instantiate(ccclass)方法是克隆,而不是引用

不太建议继承自 cc.Node。如果要克隆的话,直接 cc.instantiate(newNode) 应该也是可以的。要注意 newNode 必须是 new 出来的对象,而不是 class 本身。class 本身是一个函数,无法克隆。

现在正在优化animation˙这块,每一个角色都是继承自cc.node的CCCLASS,就像这样 people = new unitData.UnitClass();来进行初始化。
现在想优化这里使用对象池,因为每一个people创建后还需要动态创建动画文件,动画数据写在配置文件,读出后使用异步加载atlas来创建分别的帧动画。因为创建的动画较多,所以想把people封到对象池,但尝试了之后发现people放入对象池后不管多少个其实都只是一个。附上角色生成代码
怎么优化动画这块呢?
> var people = null;

        //从人物对象池中获取
        let poolAnimItem = gameData.getAnimFromPool(unitID);
        if(poolAnimItem){
            people = poolAnimItem;
        }
        else{
            people = new unitData.UnitClass();
            var basePeopleData = gameData.GetDataFromBasePeopleData(unitID);
            console.log(basePeopleData)
            {
//这里创建动画数据
                lAnimationData.createLAnimation(basePeopleData.Animation, people, type);
            }
            gameData.setAnimPool(unitID,people);
        }
        people.m_uuID = (self.people_uuId);
        self.people_uuId++;
        var unitclass = gameData.GetUnitClassData(unitID);
        people.setUnitClass(unitclass);

还有在优化中发现就算停止了update函数,场景中node一多,帧数就掉,大约80多个带动画的node(一个动画大约8-16个clip),还有30-40个静态建筑node,优化到现在差不多能50-60帧了,但一战斗就不太行了。
web上流畅度没问题,到了小程序一战斗帧数15-30,就是coc的那种游戏方式。图集优化,loadres也自己做了map封装,animation这块该怎么优化?

1赞

如果是cc.Instantiate(prefab) 出来的节点 那么此节点下的脚本中的function也是指向同一个对象吗?能提供下解决思路吗

2.3.3 版本 Xcode 版本10.0 iPhone 12.4.8 用这个 cc.instantiate 加载缓存的prefab 返回的node 在addChild(node)处崩溃 xcode 提示 Message from debugger: Terminated due to memory issue 很容易出现 不知道什么原因 能给我点提示吗