void DisplayFactory::createSpriteDisplay(Bone *bone, DecorativeDisplay *decoDisplay) { Skin *skin = nullptr; SpriteDisplayData *displayData = (SpriteDisplayData *)decoDisplay->getDisplayData(); std::string textureName = displayData->displayName; size_t startPos = textureName.find_last_of("."); if(startPos != std::string::npos) { textureName = textureName.erase(startPos); } //! create display if(textureName.length() == 0) { skin = Skin::create(); } else { skin = Skin::createWithSpriteFrameName((textureName + ".png").c_str()); } decoDisplay->setDisplay(skin); if (skin == nullptr) { return; } skin->setBone(bone); initSpriteDisplay(bone, decoDisplay, displayData->displayName.c_str(), skin); Armature *armature = bone->getArmature(); if (armature) { if (armature->getArmatureData()->dataVersion >= VERSION_COMBINED) { skin->setSkinData(displayData->skinData); } else { skin->setSkinData(*bone->getBoneData()); } } }