Cocos Creator 设置网络图片

setIcon(url: string, sprite: cc.Sprite) {
        this.__loadImage(url, (res) => {
        sprite.spriteFrame = new cc.SpriteFrame(res);
        console.log(res);
    })
}
__loadImage(url, callback) {
        cc.loader.load({ url: url, type: "jpeg" }, (err, tex) => {
            if (err) {
                cc.error(err);
            } else {
                callback(tex);
            }
        });
    }
    loadEnd(filePath, callback) {
        cc.loader.load(filePath, (err, tex) => {
            if (err) {
                cc.error(err);
            } else {
                callback(tex);
            }
        });
    }

    loadImage(url, callback) {
        // Web平台直接加载
        if (!cc.sys.isNative) {
            this.__loadImage(url, callback);
            return;
        }

        let dirpath = jsb.fileUtils.getWritablePath() + "TclGameImg/";
        cc.log("dirpath: " + dirpath);

        let md5 = require("./encrypt/Md5");
        let md5Url = md5.md5_hex(url);
        let filePath = dirpath + md5Url + '.jpg';
        cc.log("filepath: " + filePath);

        if (jsb.fileUtils.isFileExist(filePath)) {
            cc.log("Remote img is find: " + filePath);
            this.loadEnd(filePath, callback);
            return;
        }
        let self = this;
        let saveFile = function (data) {
            if (data && typeof data !== "undefined") {
                if (!jsb.fileUtils.isDirectoryExist(dirpath)) {
                    jsb.fileUtils.createDirectory(dirpath);
                } else {
                    cc.log("路径 " + dirpath + "已经存在。");
                }

                if (jsb.fileUtils.writeDataToFile(new Uint8Array(data), filePath)) {
                    cc.log("Remote img save succeed.");
                    self.loadEnd(filePath, callback);
                } else {
                    cc.log("Remote img save failed.");
                }
            } else {
                cc.log("Remote img download failed.");
            }
        };
     let xhr = cc.loader.getXMLHttpRequest();
        xhr.onreadystatechange = function () {
            cc.log("xhr.readyState: " + xhr.readyState);
            cc.log("xhr.status: " + xhr.status);
            if (xhr.readyState === 4){
                if (xhr.status === 200){
                    saveFile(xhr.response);
                } else {
                    saveFile(null);
                }
            }
        }.bind(this);
        xhr.responseType = 'arraybuffer';
        xhr.open('GET', url, true);
        xhr.send();
        
}

参考:https://www.jianshu.com/p/a5c77a045063

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值