骨骼文件远程加载,如何设置纹理的预乘

  • Creator 版本: 2.4.2

  • 目标平台: 模拟器

  • 重现方式:必现

  • 首个报错:

我们项目用到了好多骨骼文件,所以压缩放在了服务器上,通过远程下载到本地,然后解压到本地,再去调用。现在遇到的问题是骨骼动画有黑边。经过网上查找资料,要设置骨骼组件和骨骼纹理的预乘,骨骼组件的纹理预乘好设置,但是骨骼纹理的预乘如何设置成了一个问题。加载本地骨骼资源的相关代码:

private static getSkinRes(name): Promise<SkinRes> {
    return new Promise<SkinRes>((resolve, reject) => {
        if (SkinManager.skinCache[name] != null) {
            return resolve(SkinManager.skinCache[name])
        }
        cc.assetManager.loadRemote(PlatformManager.wrapUserDataPath(Global.skinFloder + name + "_ske.txt"), function (err, ske: cc.TextAsset) {
            if (err) reject(err)
            cc.assetManager.loadRemote(PlatformManager.wrapUserDataPath(Global.skinFloder + name + "_tex.txt"), function (err, tex: cc.TextAsset) {
                if (err) reject(err)
                cc.assetManager.loadRemote(PlatformManager.wrapUserDataPath(Global.skinFloder + name + "_tex.png"), function (err, png: cc.Texture2D) {
                    if (err) reject(err)
                    var asset = new dragonBones.DragonBonesAsset()
                    asset.dragonBonesJson = ske.text
                    var atlas = new dragonBones.DragonBonesAtlasAsset()
                    atlas.atlasJson = tex.text
                    atlas.texture = png
                    var skinRes = new SkinRes(asset, atlas)
                    SkinManager.skinCache[name] = skinRes
                    resolve(skinRes)
                })
            })
        })

    })
}

static setImageBone(imageBone: dragonBones.ArmatureDisplay, skinName, action = Skin.ActionType.XINGZOU, skinColor:cc.Color = null, callback = null) {
    this.getSkinRes(skinName)
        .then((res) => {
            imageBone.dragonAtlasAsset = res.atlas
            imageBone.dragonAsset = res.asset
            imageBone.armatureName = 'armatureName'
            imageBone['SkinName'] = skinName
            imageBone['SkinColor'] = skinColor
            // imageBone.playAnimation(action, 0)
            SkinManager.playAnimation(imageBone, action, 0)
            if (callback != null) {
                callback()
            }
        })
        .catch((e) => {
            console.log(e)
        })
}

export class SkinRes {
    asset: dragonBones.DragonBonesAsset
    atlas: dragonBones.DragonBonesAtlasAsset
    constructor(asset, atlsa) {
        this.asset = asset
        this.atlas = atlsa
    }
}

失败尝试:

1、设置png.setPremultiplyAlpha(true)无效
2、imageBone.dragonAtlasAsset.texture.setPremultiplyAlpha(true)无效

这两种方法都无效。求大家的指点。谢谢大家

备注:如果把资源放在本地即Texture目录下的话,设置骨骼组件预乘和设置资源的预乘,这样就没有了黑边。

我给我自己顶一下,求大佬们帮助

自己顶一下,谢谢大佬帮助

解决了,分享下解决方案:用Bundle。

1赞

最后是用的哪个方法解决的呀?