create插件 给场景中 的 sprite 组件 赋值

“scene-script”:"tool.js"在这个插件脚本中 调用如下代码 报错没有这个文件,但是 是有的。如果这样写 不可以 。请问各位大佬 应该怎么操作
cc.loader.loadRes(newUrl, cc.SpriteFrame, function (err, spriteFrame) {
if (err) {
cc.error(err.message || err);
return;
}
cc.log('Result should be a sprite frame: ’ + (spriteFrame instanceof cc.SpriteFrame));
});

1赞

求插件大佬 指点下 ,

目前不支持 loadRes 喔,不过可以通过 assetdb 的 API(如 queryAsset)获得对应 spriteFrame 的 uuid,然后通过 cc.AssetLibrary.loadAsset(uuid, callback) 进行加载。之后我们会加入 loadRes 的支持。

2赞

谢谢大佬 问题 解决了,我已经 找到所有的 scene 并且自动修改了 多语言插件 数据 并且保存,可是 还有全部prefab ,目前 不知道如何像scene那样 修改数据 保存.列如这样的api _Scene.loadSceneByUuid, _Scene.save();

‘StartFindPrefabi8n’: function (event, language) {
Editor.warn("language == " + language);

    var i8nSpIsAdd = function (language, spriteFrameSet) {
        spriteFrameSet.forEach(function (item) {
            if (language == item.language) {
                Editor.warn("language  == " + language + " item.language == " + item.language);
                return true;
            }

        });
        return false;
    }
    var cloneObj = function cloneObj(obj) {
        var newJsonObj = {}; newJsonObj = JSON.parse(JSON.stringify(obj));
        for (items in obj) {
            if (typeof obj[items] == "function" || typeof obj[items] == "undefined" || obj[items] instanceof RegExp) {
                newJsonObj[items] = obj[items];
            }
        }
        var newObj = new obj.constructor;
        for (items in newJsonObj) {
            newObj[items] = newJsonObj[items]
        }
        return newObj;
    }
    Editor.assetdb.queryAssets("db://assets/**\/*", 'prefab', function (err, prefabs) {
        prefabs.forEach(function (prefab) {
            Editor.log("prefab" + JSON.stringify(prefab));
          
            cc.AssetLibrary.loadAsset(prefab.uuid, function (error, asset) {

                if (error) {
                    Editor.log(" prefab uuid error" + error);
                    return;
                }
                //    node = cc.instantiate(asset);        
                debugger;
                asset.data.children.forEach(function (node) {
                    let i8nsp = node.getComponent("LocalizedSprite");

                    if (i8nsp) {
                        //不需要重复添加
                        if (i8nSpIsAdd(language, i8nsp.spriteFrameSet)) {
                            Editor.log(language + "多语言已经添加过");
                            return;
                        }
                        let _uuid = i8nsp.spriteFrameSet[0].spriteFrame._uuid;
                        Editor.Ipc.sendToMain('testi18:findUuid', _uuid, language, function (url, uuid) {
                            if (uuid) {
                                cc.AssetLibrary.loadAsset(uuid, function (error, asset) {
                                    debugger;
                                    if (!error) {
                                        if (asset) {
                                            let length = i8nsp.spriteFrameSet.length;
                                            i8nsp.spriteFrameSet[length] = cloneObj(i8nsp.spriteFrameSet[0]);
                                            Editor.log("spriteFrame==" + i8nsp.spriteFrameSet[length].spriteFrame + "  asset== " + asset);
                                            i8nsp.spriteFrameSet[length].spriteFrame = asset;
                                            i8nsp.spriteFrameSet[length].language = language;
                                            //虽然报错但还是可以使用
                                            //    _Scene.save();    

                                            Editor.success(url + " 多语言添加成功")
                                            
                                        }
                                        else {
                                            Editor.failed("资源加载错误 url" + url + "   uuid " + uuid);
                                        }

                                    }
                                });
                            }
                            else {
                                Editor.warn("url " + url + " not find ");
                            }

                        });
                    }
                });
             
                // Editor.assetdb.saveExists(prefab.url, asset, function (err, meta) {
                //     if(err)
                //     {
                //         Editor.error("saveExists err "+err);
                //     }
                //     else
                //     {
                //         Editor.log("meta" + JSON.stringify(meta));
                //     }
                // });
                //do more work
            });
        });
    });
    //发送回调信息
    if (event.reply) {
        let str = "发送回调信息"
        event.reply(str);
    }
}

这样修改 保存不了数据

顶一下,别沉啊

cc.loader.load(_iconUrl, function (err, tex) {
var spriteFrame=new cc.SpriteFrame(tex)
node.getComponent(cc.Sprite).spriteFrame=spriteFrame;
});

这个已经解决 了 我想问 怎么再插件里操作prefab

解决了吗?我也想在插件里面操作prefab。另外_Scene.loadSceneByUuid好像不能用啊,说_Scene不存在

找到保存的方法了吗?

Editor.assetdb.queryAssets(“db://assets/resources/levels/level_t*”, ‘prefab’, function (err, prefabs) {
prefabs.forEach(function (prefab) {
cc.log(“prefab” + JSON.stringify(prefab));

			cc.AssetLibrary.loadAsset(prefab.uuid, function (error, asset) {
				cc.log(error, asset);

			});
		});
		
	});

loadAsset出来的asset并不是prefab的内容,所以不能修改后直接save