cc.assetManager.loadRemote加载不了微信头像

项目升级了2.4.3,发现cc.assetManager.loadRemote这个接口微信头像加载不出来。

cc.assetManager.loadRemote(lImgUrl, { cacheEnabled: true }, function (err: Error, texture: cc.Texture2D) {
            console.log(texture);
            if (err) {
                G.app.logMgr.warn("load url texture error: ", lImgUrl);
                return;
            }
            sprImage.spriteFrame = new cc.SpriteFrame(texture);
        });

之前用cc.loader.load是没问题的。
有大佬答疑下么?

1赞

public static async loadWeiXinHead(avatarurl:string){
return new Promise<cc.SpriteFrame>((resolve)=>{
cc.assetManager.loadRemote(avatarurl, {ext: ‘.png’}, (err, data:cc.Texture2D) => {
if (!err && data) {
resolve(new cc.SpriteFrame(data));
}else{
console.log("loadWeiXinHead ", err);
resolve(null);
}
});
});
}

1赞

可以参考下这段代码:

cc.assetManager.loadRemote<cc.Texture2D>("http://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJ1E1XEicr8vAj5o8DMT7GTfCtFyC6vok9TImPjf6BfKBKLFA8hKBS6Wiaz2GJyQQWoV5lA7fhqS4SA/96", {ext: '.png'}, (err, res)=>{
            var newSpriteFrame = new cc.SpriteFrame(res);
            var newNode = new cc.Node();
            newNode.addComponent(cc.Sprite).spriteFrame = newSpriteFrame;
            this.node.addChild(newNode);
        })
4赞

我这边2.4.2也有碰到用loadRemote显示不了微信头像,开调试就可以显示,应该是request或download可信域名的问题,我猜loadRemote用的是wx.downloadFile。改用dom加载方式解决了。

let image = new Image();
image.onload = () => {
	let texture = new cc.Texture2D();
	texture.initWithElement(image);
	texture.handleLoadedTexture();
	let spriteFrame = new cc.SpriteFrame(texture);
	resolve(spriteFrame);
}
image.onerror = error => {
	resolve(null);
};
image.src = url;
4赞

加上{ext: ‘.png’}就好了,真是扯淡

1赞

服了 怎么文档也不写清楚

/**
 * 更新头像
 * @param url 头像链接
 */
private updateAvatar(url: string) {
    let image = wx.createImage();
    image.onload = () => {
        let texture = new cc.Texture2D();
        texture.initWithElement(image);
        texture.handleLoadedTexture();
        this.avatarSprite.spriteFrame = new cc.SpriteFrame(texture);
    };
    image.src = url;

}

微信图片显示功能来实现,肯定没问题

你这这串代码是自动修复引擎源码吗? :joy:

请问,我这样写会走到image.onerror,是为什么呢?

不清楚具体情况.
如果onload也能进的话, 直接将

image.onerror = error => {
	resolve(null);
};

去掉吧.
或者试试他们的*{ext: ‘.png’}*写法.