只试过原生环境
let bone = skeleton.findBone(‘gun’);
bone.rotation = 100;
skeleton.updateWorldTransform();
这样做对应骨骼没有变化
原生环境下bone是通过jsb导出的,直接修改属性,C++中spBone的属性没有变化,有没有办法能修改spBone的属性,使调用updateWorldTransform();后可以生效
抱歉原生平台暂时没办法实现,技术上因为 spine 底层是 C 的结构体,所以暂时没办法做到数据绑定。
解决了,只能手动导出一个方法,但这种参数处理方法不太合理
希望以后可以解决这个问题
if (argc == 3) {
const char* arg0;
std::string arg0_tmp; ok &= jsval_to_std_string(cx, args.get(0), &arg0_tmp); arg0 = arg0_tmp.c_str();
int arg1;
ok &= jsval_to_int32(cx, args.get(1), (int32_t *)&arg1);
int arg2;
ok &= jsval_to_int32(cx, args.get(2), (int32_t *)&arg2);
JSB_PRECONDITION2(ok, cx, false, "Error processing arguments");
spBone* ret = cobj->findBone(arg0);
jsval jsret = JSVAL_NULL;
do {
if (ret)
{
switch (arg1)
{
case 0:
ret->rotation = arg2;
break;
case 1:
ret->x = arg2;
break;
case 2:
ret->y = arg2;
break;
default:
break;
}
}
} while (0);
args.rval().setUndefined();
return true;
}
2赞
关注,楼主赞啊
微信小游戏上的修改bone数据如何让其生效,我设置了没有生效。
代码如下:
this.m_spineAnimation.updateWorldTransform();
let bone : sp.spine.Bone = this.m_spineAnimation.findBone(“tou”);
cc.warn(bone);
bone.rotation = 1;
bone.updateAppliedTransform();
cc.error(bone);
animationName = “idle”;