将一个spine的骨骼绑定到另一个spine的骨骼上
2016-04-12 21:08
369 查看
改源码,如下:
-----1.BoneData.h文件(editor-support->spine文件夹下 )
将struct spBoneData{}中的spBoneData* const parent;的const取掉
-----2.Bone.h文件(editor-support->spine文件夹下)
将struct spBone{}中的spBone* const parent;的const取掉
-----3.Skeleton.h文件(editor-support->spine文件夹下)
增加方法
void spSkeleton_changeBone(spSkeleton* skeleton,
spSkeleton* goleSkeleton,
const char* boneName1,
const char* boneName2);
//skeleton:要绑定的目标spSkeleton
//goleSkeleton:要绑定的目标spSkeleton
//boneName1:被绑定的目标骨骼名字
//boneName2:要绑定的目标骨骼名字
-----4.Skeleton.c文件(editor-support->spine文件夹下)
上述方法的实现
void spSkeleton_changeBone(spSkeleton* skeleton,
spSkeleton* goleSkeleton,
const char* boneName1,
const char* boneName2)
{
spBone* bone1;
spBone* bone2;
for (int i =
0; i < skeleton->bonesCount; i++)
{
if (!strcmp(skeleton->bones[i]->data->name, boneName1))
{
bone1 = skeleton->bones[i];
}
}
for (int i =
0; i < goleSkeleton->bonesCount; i++)
{
if (!strcmp(goleSkeleton->bones[i]->data->name, boneName2))
{
bone2 = goleSkeleton->bones[i];
}
}
bone2->data->parent = bone1->data;//1.的原因 因为const不能修改 或者你可以保留const然后*bone2来赋值
bone2->parent = bone1;//2.的原因 因为const不能修改 或者你可以保留const然后*bone2来赋值
}
-----5.SkeletonRenderer.h文件(editor-support->spine文件夹下)
增加方法
void changeBone(spSkeleton* goleSkeleton,
const char* name1,
const char* name2);
-----6.SkeletonRenderer.cpp文件(editor-support->spine文件夹下)
上述方法实现
void SkeletonRenderer::changeBone(spSkeleton* goleSkeleton,
const char* name1,
const char* name2)
{
spSkeleton_changeBone(_skeleton, goleSkeleton, name1, name2);
}
-----7.使用
auto jianchihu =
spine::SkeletonAnimation::createWithFile("monster_jianchihu1.json",
"monster_jianchihu1.atlas",1);
jianchihu->setPosition(this->getContentSize().width/2-50,0);
jianchihu->setAnimation(0,
"monster_jianchihu_wait",
true);
this->addChild(jianchihu);
auto hero2 =
DataManager::getInstance()->getHeroSkeletonAnimation(0.5);
hero2->setAnimation(0,
"red_wait", true);
this->addChild(hero2);
jianchihu->changeBone(hero2->getSkeleton(),
"zuoqi", "rig");
结果就是将hero2的rig骨骼绑定到了jianchihu的zuoqi骨骼上
-----8.总结
4.中的实现方法还有待改进,比如加完之后人物不一定是正立的,可能会根据jianchihu的zuoqi骨骼的rotation属性旋转一定的角度,这里可以根据boneData的属性做相应的改正。
还有就是可能涉及到绑定骨骼的父子骨骼关系问题,如果出现显示问题,可能需要循环遍历骨骼的所有同级骨骼,然后把响应骨骼的父节点或者子节点的骨骼全都换成要绑定到的骨骼上。
-----1.BoneData.h文件(editor-support->spine文件夹下 )
将struct spBoneData{}中的spBoneData* const parent;的const取掉
-----2.Bone.h文件(editor-support->spine文件夹下)
将struct spBone{}中的spBone* const parent;的const取掉
-----3.Skeleton.h文件(editor-support->spine文件夹下)
增加方法
void spSkeleton_changeBone(spSkeleton* skeleton,
spSkeleton* goleSkeleton,
const char* boneName1,
const char* boneName2);
//skeleton:要绑定的目标spSkeleton
//goleSkeleton:要绑定的目标spSkeleton
//boneName1:被绑定的目标骨骼名字
//boneName2:要绑定的目标骨骼名字
-----4.Skeleton.c文件(editor-support->spine文件夹下)
上述方法的实现
void spSkeleton_changeBone(spSkeleton* skeleton,
spSkeleton* goleSkeleton,
const char* boneName1,
const char* boneName2)
{
spBone* bone1;
spBone* bone2;
for (int i =
0; i < skeleton->bonesCount; i++)
{
if (!strcmp(skeleton->bones[i]->data->name, boneName1))
{
bone1 = skeleton->bones[i];
}
}
for (int i =
0; i < goleSkeleton->bonesCount; i++)
{
if (!strcmp(goleSkeleton->bones[i]->data->name, boneName2))
{
bone2 = goleSkeleton->bones[i];
}
}
bone2->data->parent = bone1->data;//1.的原因 因为const不能修改 或者你可以保留const然后*bone2来赋值
bone2->parent = bone1;//2.的原因 因为const不能修改 或者你可以保留const然后*bone2来赋值
}
-----5.SkeletonRenderer.h文件(editor-support->spine文件夹下)
增加方法
void changeBone(spSkeleton* goleSkeleton,
const char* name1,
const char* name2);
-----6.SkeletonRenderer.cpp文件(editor-support->spine文件夹下)
上述方法实现
void SkeletonRenderer::changeBone(spSkeleton* goleSkeleton,
const char* name1,
const char* name2)
{
spSkeleton_changeBone(_skeleton, goleSkeleton, name1, name2);
}
-----7.使用
auto jianchihu =
spine::SkeletonAnimation::createWithFile("monster_jianchihu1.json",
"monster_jianchihu1.atlas",1);
jianchihu->setPosition(this->getContentSize().width/2-50,0);
jianchihu->setAnimation(0,
"monster_jianchihu_wait",
true);
this->addChild(jianchihu);
auto hero2 =
DataManager::getInstance()->getHeroSkeletonAnimation(0.5);
hero2->setAnimation(0,
"red_wait", true);
this->addChild(hero2);
jianchihu->changeBone(hero2->getSkeleton(),
"zuoqi", "rig");
结果就是将hero2的rig骨骼绑定到了jianchihu的zuoqi骨骼上
-----8.总结
4.中的实现方法还有待改进,比如加完之后人物不一定是正立的,可能会根据jianchihu的zuoqi骨骼的rotation属性旋转一定的角度,这里可以根据boneData的属性做相应的改正。
还有就是可能涉及到绑定骨骼的父子骨骼关系问题,如果出现显示问题,可能需要循环遍历骨骼的所有同级骨骼,然后把响应骨骼的父节点或者子节点的骨骼全都换成要绑定到的骨骼上。
相关文章推荐
- C#异步绑定数据实现方法
- Lua教程(六):绑定一个简单的C++类
- C#实现绑定Combobox的方法
- C#实现下拉框绑定list集合的方法
- C#数据绑定(DataBinding)简单实现方法
- Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
- C# Datagridview绑定List方法代码
- WPF绑定实例详解
- jQuery on()绑定动态元素出现的问题小结
- jQuery支持动态参数将函数绑定到事件上的方法
- jQuery事件绑定用法详解(附bind和live的区别)
- jQuery判断元素上是否绑定了指定事件的方法
- jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
- jQuery事件绑定和委托实例
- jQuery事件绑定与解除绑定实现方法
- jQuery实现获取绑定自定义事件元素的方法
- jQuery简单绑定单个事件的方法示例
- Knockout自定义绑定创建方法
- javascript实现动态模态绑定grid过程代码
- 第九节 绑定 [9]