写了一个用于切换当前场景内所有同名节点图片的函数,可以直接使用,直接上代码
let sceneSprite = new Map();
replaceSpriteFrame(node, spriteFrame) {
let scene = cc.director.getScene();
let sceneCanvas = scene.getChildByName('Canvas');
let sceneSf = null;
if (sceneSprite.has(scene.name)) {
sceneSf = sceneSprite.get(scene.name);
} else {
sceneSf = this.findComponents(sceneCanvas, cc.Sprite);
sceneSprite.set(scene.name, sceneSf);
}
if(sceneSf){
sceneSf.forEach((item)=>{
if(item.node.name===node){
item.spriteFrame=spriteFrame;
}
});
}
},
findComponents(node, type) {
if (!node && !type) {
return;
}
let components = [];
findAllComponents(node, type);
return components;
function findAllComponents(node, type) {
components = components.concat(node.getComponents(type));
if (node.children.length > 0) {
node.children.forEach((item) => {
findAllComponents(item, type);
});
}
}
},
主要是需要查找到所有需要修改的节点,也可以通过查找节点名称的方法去实现,但我一次查询出了节点下所有拥有该类型的组件并缓存起来,下次需要修改其他的节点的时候就会快速很多,当然首次执行的工作量也会比较大。
自己修改下查询的组件类型,可以查询出该节点下的不同组件