mark一下
因为spine原生局部换装换不了,前几天就折腾了自动绑定,折腾了两天都没搞定,放弃了o(╥﹏╥)o~然后呢,我用了一个很骚的骚操作完成了原生的“局部换装”,其实用的就是挂点换装,不过呢就是所有要换装的部位都使用挂点,然后直接用spriteFrame换装,然后把spine原始图集里不需要的装扮直接删成空png~然后,嘿嘿~一次编译全平台通用(* ̄︶ ̄),
1赞
补充一下自动绑定的关键代码:
jsb_cocos2dx_spine_auto.cpp新增:
static bool js_cocos2dx_spine_SkeletonRenderer_replaceAttachmentRegion(se::State& s) {
spine::SkeletonRenderer* cobj = (spine::SkeletonRenderer*)s.nativeThisObject();
SE_PRECONDITION2(cobj, false, "js_cocos2dx_spine_SkeletonRenderer_replaceAttachmentRegion : Invalid Native Object");
const auto& args = s.args();
size_t argc = args.size();
CC_UNUSED bool ok = true;
if (argc == 6) {
std::string arg0;
ok &= seval_to_std_string(args[0], &arg0);
cocos2d::middleware::Texture2D* arg1 = nullptr;
ok &= seval_to_native_ptr(args[1], &arg1);
cocos2d::renderer::Rect arg2;
ok &= seval_to_Rect2(args[2], &arg2);
cocos2d::Size arg3;
ok &= seval_to_Size(args[3], &arg3);
cocos2d::Vec2 arg4;
ok &= seval_to_Vec2(args[4], &arg4);
int arg5 = 0;
int32_t tmp = 0;
ok &= seval_to_int32(args[5], &tmp);
arg5 = (int)tmp;
cobj->replaceAttachmentRegion(arg0, arg1, arg2, arg3, arg4, arg5);
SE_PRECONDITION2(ok, false, "js_cocos2dx_spine_SkeletonRenderer_replaceAttachmentRegion : Error processing arguments");
return true;
}
SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0);
return false;
}
SE_BIND_FUNC(js_cocos2dx_spine_SkeletonRenderer_replaceAttachmentRegion)
方法: bool js_register_cocos2dx_spine_SkeletonRenderer(se::Object* obj) 后面新增:
cls->defineFunction("replaceAttachmentRegion", _SE(js_cocos2dx_spine_SkeletonRenderer_replaceAttachmentRegion));
jsb_conversions.cpp新增:
bool seval_to_Rect2(const se::Value& v, cocos2d::renderer::Rect* rect)
{
assert(rect != nullptr);
SE_PRECONDITION2(v.isObject(), false, "Convert parameter to Rect failed!");
se::Object* obj = v.toObject();
se::Value x;
se::Value y;
se::Value width;
se::Value height;
bool ok = obj->getProperty("x", &x);
SE_PRECONDITION3(ok && x.isNumber(), false, *rect = cocos2d::renderer::Rect::ZERO);
ok = obj->getProperty("y", &y);
SE_PRECONDITION3(ok && y.isNumber(), false, *rect = cocos2d::renderer::Rect::ZERO);
ok = obj->getProperty("width", &width);
SE_PRECONDITION3(ok && width.isNumber(), false, *rect = cocos2d::renderer::Rect::ZERO);
ok = obj->getProperty("height", &height);
SE_PRECONDITION3(ok && height.isNumber(), false, *rect = cocos2d::renderer::Rect::ZERO);
rect->x = x.toFloat();
rect->y = y.toFloat();
rect->w = width.toFloat();
rect->h = height.toFloat();
return true;
}
jsb_cocos2dx_spine_auto.hpp新增:
SE_DECLARE_FUNC(js_cocos2dx_spine_SkeletonCacheAnimation_replaceAttachmentRegion);
jsb_conversions.hpp新增:
bool seval_to_Rect2(const se::Value& v, cocos2d::renderer::Rect* rect);
1赞
可以贴个demo地址参考吗?3.X准备用到了。
mark!!
mark~~~~~
这块原生好像不能正常替换,请问大佬原生部分的备份怎么写的?
medTex.setRealTextureIndex(0 - this.textureID);
这里的this.textureID,是在哪里维护的
大佬,请问一下文件中有SkeletonRenderer::replaceAttachmentRegion是文章中提到的用法,但是new spine对象会一起变掉,我看到还有另外一个函数SkeletonRenderer::replaceAttachmentTexture 这个函数是为解决new多个spine对象,替换一个,其它一起换了的问题么?
赶紧标记一下mark
大佬可以说一下这个资源副本实例化spine的具体实现吗,感激不尽~