DragonBones显示问题--2个节点相同骨骼不同图集时的显示出错问题


场景中2个节点,节点中的DragonAsset调用相同骨骼文件,图集用不同的。
这时会有一个节点显示错误,只要屏蔽一个,另一个就正常。

Human_Warrior_02_tex.json文件中的name已改为Human_Warrior_01

NewProject.rar (532.4 KB)

你好 非常感谢你的反馈 我看下这个异常

你好 我们已经确认这个异常,将会在后续版本中更新,这是已经提交的pr
https://github.com/cocos-creator/engine/pull/3623

1赞

2.0.7的版本我看dragonBones里的代码是已经修改的。但是在editor里还是同一个贴图啊?

这里改成Human_Warrior_02

还是不行。ske里的name叫01的话,单独一个node显示02的贴图直接报错。必须01和02两个node都显示才行?

没有报错哦,我用的是你上面的demo测试的,两个都正常显示了

ske里有一个name叫01, 1_tex.json里的name叫01, 2_tex.json里的name叫02,如果场景只有一个node,tex用2_tex.json就会报错。启动也不显示

tex02里的name改成02了。场景里只保留02,删除01就显示不了了。

是否与你不同?

编辑器里显示。点运行,chrome里看不到人物了。关掉cocos,重新打开工程,场景里也不显示了。

我用的是creator 2.0.7

Uncaught TypeError: Cannot set property ‘x’ of undefined
at dragonBones_CCSlot._updateMesh (CCSlot.js:279)
at dragonBones_CCSlot.287.Slot.update (dragonBones.js:6368)
at Armature.287.Armature.advanceTime (dragonBones.js:3814)
at dragonBones_CCFactory.287.BaseFactory.buildArmature (dragonBones.js:14112)
at dragonBones_CCFactory.buildArmatureDisplay (CCFactory.js:103)
at dragonBones_ArmatureDisplay._buildArmature (ArmatureDisplay.js:439)
at dragonBones_ArmatureDisplay._refresh (ArmatureDisplay.js:466)
at dragonBones_ArmatureDisplay._init (ArmatureDisplay.js:389)
at dragonBones_ArmatureDisplay.__preload (ArmatureDisplay.js:380)
at CCClass.eval [as _invoke] (eval at createInvokeImpl (component-scheduler.js:256), :3:65)

嗯 发现问题了

怎么解决呢。好像是ske的name必须和tex的name相同?this._getTextureData用的是ske里的name,改成tex里的name?

BaseFactory.prototype._getSlotDisplay = function (dataPackage, displayData, rawDisplayData, slot) {
//var dataName = dataPackage !== null ? dataPackage.dataName : displayData.parent.parent.parent.name;
var dataName = dataPackage !== null ? dataPackage.textureAtlasName: displayData.parent.parent.parent.name;

这样改会不会引起别的问题?

这个问题属于2.0.7所使用的当前版本的龙骨库中存在问题:
原生平台fix:
找到CocosCreator安装目录,修改cocos2d-x引擎,路径为…resources\cocos2d-x\cocos\editor-support\dragonbones\factory\BaseFactory.cpp,
将cpp文件中的

else if (dataPackage != nullptr && !dataPackage->textureAtlasName.empty())

修改为:

if (imageDisplayData->texture == nullptr || (dataPackage != nullptr && !dataPackage->textureAtlasName.empty()))

这样就可以在原生平台看到效果
web平台fix:
在engine目录找到dragonBones.js,路径为:…resources\engine\extensions\dragonbones\lib\dragonBones.js
找到:

else if (dataPackage !== null && dataPackage.textureAtlasName.length > 0) 

修改为:

if (imageDisplayData === null || (dataPackage !== null && dataPackage.textureAtlasName.length > 0))

然后编译下engine就可以在浏览器看到效果。

编辑器上的效果问题,只能等后面更新打包就会修复。

谢谢!下边的meshDisplayData一起改了好像就都可以了。

meshDisplayData是哪里的?我怎么找不到这个属性

你好,我们想使用你的这个demo资源制作一个官方范例demo,可以授权给我们使用么。