bone隐藏

cocostudio做的动画。

其中有一根骨骼用
pBone->getDisplayManager()->setVisible(false);无法隐藏

pBone->changeDisplayWithIndex(-1,true);可以隐藏

原因是DisplayManager中的setVisible函数
void DisplayManager::setVisible(bool visible)
{
if(!_displayRenderNode)
return;

_visible = visible;
_displayRenderNode->setVisible(visible);

}

_displayRenderNode为NULL的原因。

跟了下代码 原因是CCArmature.cpp中init函数中

MovementBoneData *movBoneData = movData->getMovementBoneData(bone->getName().c_str());
CC_BREAK_IF(!movBoneData || movBoneData->frameList.size() <= 0);

movBoneData为空了

肯定是cocostudio制作动画时的问题。

但我不清楚是什么问题。

有谁知道么?谢谢!

引擎版本3,.2
一行一行跟代码
发现 CCArmature.cpp里有
for (auto& element : armatureData->boneDataDic)
{
Bone *bone = createBone(element.first.c_str());

            //! init bone's  Tween to 1st movement's 1st frame
            do
            {
                MovementData *movData = animationData->getMovement(animationData->movementNames.at(0).c_str());
                CC_BREAK_IF(!movData);

MovementData *movData = animationData->getMovement(animationData->movementNames.at(0).c_str());这句话表示 任意动画都使用第一个动画的movData。
但是第一个动画的movData其实是和其他动画的movData未必一致。movBoneDataDic里面的元素就不一样。

这样就导致如果第一个动画没使用某根骨骼 而另一个动画使用了这根骨骼 那么这根骨骼都没有办法正确的初始化。

才导致了pBone->getDisplayManager()->setVisible(false);无法隐藏的问题。