mirror of https://github.com/axmolengine/axmol.git
1.Fix when first frame have no key frame, the armature don't display.
2.Fix color change bug
This commit is contained in:
parent
e7d5ac3211
commit
57ada1fb36
|
@ -407,7 +407,10 @@ void CCArmature::updateOffsetPoint()
|
||||||
CCRect rect = boundingBox();
|
CCRect rect = boundingBox();
|
||||||
setContentSize(rect.size);
|
setContentSize(rect.size);
|
||||||
m_pOffsetPoint = ccp(-rect.origin.x, -rect.origin.y);
|
m_pOffsetPoint = ccp(-rect.origin.x, -rect.origin.y);
|
||||||
setAnchorPoint(ccp(m_pOffsetPoint.x / rect.size.width, m_pOffsetPoint.y / rect.size.height));
|
if (rect.size.width != 0 && rect.size.height!= 0)
|
||||||
|
{
|
||||||
|
setAnchorPoint(ccp(m_pOffsetPoint.x / rect.size.width, m_pOffsetPoint.y / rect.size.height));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -133,7 +133,7 @@ protected:
|
||||||
|
|
||||||
CC_SYNTHESIZE_RETAIN(CCArmatureAnimation *, m_pAnimation, Animation);
|
CC_SYNTHESIZE_RETAIN(CCArmatureAnimation *, m_pAnimation, Animation);
|
||||||
|
|
||||||
CC_SYNTHESIZE(CCArmatureData *, m_pArmatureData, CCArmatureData);
|
CC_SYNTHESIZE(CCArmatureData *, m_pArmatureData, ArmatureData);
|
||||||
|
|
||||||
CC_SYNTHESIZE(CCBatchNode*, m_pBatchNode, BatchNode);
|
CC_SYNTHESIZE(CCBatchNode*, m_pBatchNode, BatchNode);
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,11 @@ void CCBaseData::subtract(CCBaseData *from, CCBaseData *to)
|
||||||
|
|
||||||
isUseColorInfo = true;
|
isUseColorInfo = true;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
a = r = g = b = 0;
|
||||||
|
isUseColorInfo = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (skewX > M_PI)
|
if (skewX > M_PI)
|
||||||
{
|
{
|
||||||
|
@ -228,6 +232,7 @@ CCDisplayData *CCBoneData::getDisplayData(int index)
|
||||||
}
|
}
|
||||||
|
|
||||||
CCArmatureData::CCArmatureData()
|
CCArmatureData::CCArmatureData()
|
||||||
|
:dataVersion(0.1f)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -155,6 +155,7 @@ public:
|
||||||
*/
|
*/
|
||||||
std::string displayName;
|
std::string displayName;
|
||||||
|
|
||||||
|
CCBaseData skinData;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -268,6 +269,7 @@ public:
|
||||||
std::string name;
|
std::string name;
|
||||||
CCDictionary boneDataDic;
|
CCDictionary boneDataDic;
|
||||||
CCArray boneList;
|
CCArray boneList;
|
||||||
|
float dataVersion;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -154,7 +154,18 @@ void CCDisplayFactory::createSpriteDisplay(CCBone *bone, CCDecorativeDisplay *de
|
||||||
}
|
}
|
||||||
|
|
||||||
skin->setBone(bone);
|
skin->setBone(bone);
|
||||||
skin->setSkinData(*bone->getBoneData());
|
CCArmature *armature = bone->getArmature();
|
||||||
|
if (armature)
|
||||||
|
{
|
||||||
|
if (armature->getArmatureData()->dataVersion >= 0.15f)
|
||||||
|
{
|
||||||
|
skin->setSkinData(displayData->skinData);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
skin->setSkinData(*bone->getBoneData());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
decoDisplay->setDisplay(skin);
|
decoDisplay->setDisplay(skin);
|
||||||
|
|
||||||
|
|
|
@ -118,6 +118,7 @@ static const char *MOVEMENT_BONE_DATA = "mov_bone_data";
|
||||||
static const char *MOVEMENT_DATA = "mov_data";
|
static const char *MOVEMENT_DATA = "mov_data";
|
||||||
static const char *ANIMATION_DATA = "animation_data";
|
static const char *ANIMATION_DATA = "animation_data";
|
||||||
static const char *DISPLAY_DATA = "display_data";
|
static const char *DISPLAY_DATA = "display_data";
|
||||||
|
static const char *SKIN_DATA = "skin_data";
|
||||||
static const char *BONE_DATA = "bone_data";
|
static const char *BONE_DATA = "bone_data";
|
||||||
static const char *ARMATURE_DATA = "armature_data";
|
static const char *ARMATURE_DATA = "armature_data";
|
||||||
static const char *CONTOUR_DATA = "contour_data";
|
static const char *CONTOUR_DATA = "contour_data";
|
||||||
|
@ -854,6 +855,8 @@ CCArmatureData *CCDataReaderHelper::decodeArmature(cs::CSJsonDictionary &json)
|
||||||
armatureData->name = name;
|
armatureData->name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
armatureData->dataVersion = json.getItemFloatValue("data_version", 0.1f);
|
||||||
|
|
||||||
int length = json.getArrayItemCount(BONE_DATA);
|
int length = json.getArrayItemCount(BONE_DATA);
|
||||||
for (int i = 0; i < length; i++)
|
for (int i = 0; i < length; i++)
|
||||||
{
|
{
|
||||||
|
@ -913,6 +916,20 @@ CCDisplayData *CCDataReaderHelper::decodeBoneDisplay(cs::CSJsonDictionary &json)
|
||||||
{
|
{
|
||||||
((CCSpriteDisplayData *)displayData)->displayName = name;
|
((CCSpriteDisplayData *)displayData)->displayName = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cs::CSJsonDictionary *dic = json.getSubItemFromArray(SKIN_DATA, 0);
|
||||||
|
if (dic != NULL)
|
||||||
|
{
|
||||||
|
CCSpriteDisplayData *sdd = (CCSpriteDisplayData *)displayData;
|
||||||
|
sdd->skinData.x = dic->getItemFloatValue(A_X, 0);
|
||||||
|
sdd->skinData.y = dic->getItemFloatValue(A_Y, 0);
|
||||||
|
sdd->skinData.scaleX = dic->getItemFloatValue(A_SCALE_X, 1);
|
||||||
|
sdd->skinData.scaleY = dic->getItemFloatValue(A_SCALE_Y, 1);
|
||||||
|
sdd->skinData.skewX = dic->getItemFloatValue(A_SKEW_X, 0);
|
||||||
|
sdd->skinData.skewY = dic->getItemFloatValue(A_SKEW_Y, 0);
|
||||||
|
delete dic;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue