-
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目录下的话,设置骨骼组件预乘和设置资源的预乘,这样就没有了黑边。