反馈时请提供以下信息:
-
Creator 版本:3.8.0
-
目标平台:谷歌浏览器
-
重现方式:通过远程加载替换spine 的skeletonData,第一次加载没有问题,第二次加载就会变花。
-
首个报错: 没有报错
-
编辑器操作系统: windows 10
-
重现概率:100%-
反馈时请提供以下信息:
Creator 版本:3.8.0
目标平台:谷歌浏览器
重现方式:通过远程加载替换spine 的skeletonData,第一次加载没有问题,第二次加载就会变花。
首个报错: 没有报错
编辑器操作系统: windows 10
重现概率:100%-
代码
/** 骨骼动画缓存池 */
private _spCacheList: { [key: string]: sp.SkeletonData } = {};
public loadModel(remoteUrl: string, targetSp: sp.Skeleton, defaultAni: string = null, nodeScale: number = null) {
if (!remoteUrl) {
return;
}
if (this._spCacheList[remoteUrl]) {
if (targetSp) {
targetSp.skeletonData = this._spCacheList[remoteUrl];
targetSp.premultipliedAlpha = false;//解决白边问题
if (nodeScale && targetSp.node) {
targetSp.node.setScale(nodeScale, nodeScale);
}
if (defaultAni) {
targetSp.setAnimation(0, defaultAni, true);
}
}
return;
}
let imgName: string = remoteUrl.split("/")[remoteUrl.split("/").length - 1];
let imageUrl: string = remoteUrl + "/" + imgName + ".png";
let skeUrl: string = remoteUrl + "/" + imgName + ".json";
let atlasUrl: string = remoteUrl + "/" + imgName + ".atlas";
assetManager.loadAny([{ url: atlasUrl, ext: '.txt' }, { url: skeUrl, ext: '.txt' }], (error, assets) => {
if (error) {
console.log("加载远程骨骼动画失败,atlasUrl:" + atlasUrl + " skeUrl:" + skeUrl);
return;
}
assetManager.loadRemote(imageUrl, (error, imageAsset: ImageAsset) => {
if (error) {
console.log("加载远程骨骼动画图片失败,imageUrl:" + imageUrl);
return;
}
let asset = new sp.SkeletonData();
asset.skeletonJson = assets[1];
asset.atlasText = assets[0];
let texture = new Texture2D();
texture.image = imageAsset;
asset.textures = [texture];
asset.textureNames = [imgName + '.png'];
this._spCacheList[remoteUrl] = asset;
if (targetSp) {
targetSp.skeletonData = asset;
targetSp.premultipliedAlpha = false;//解决白边问题
if (nodeScale && targetSp.node) {
targetSp.node.setScale(nodeScale, nodeScale);
}
if (defaultAni) {
targetSp.setAnimation(0, defaultAni, true);
}
}
});
});
}
自己顶自己顶,官方有人看到吗?
有没有大佬帮忙分析一下。
assetManager.loadAny([{ url: atlasUrl, ext: ‘.atlas’ }, { url: skeUrl, ext: ‘.json’ }] 修改成加载对应的格式就可以了。
感谢,我也遇到了这个问题
第二次调用你封装的 loadModel 就出问题吗?
方便给个复现demo吗?我来跟进下。
第二次调用 loadModel 会直接走缓存返回了。没发复现你说的变花问题啊。
url 已经有后缀了,并不需要再传递 ext,传错了反而有问题。