Ccs.Bone获取位置

ccs.Bone本身getPosition()得到的数值总是0,0
看了论坛上其他人的提问后得知c++版本可以用
bone->getWorldInfo().x 和
bone->getWorldInfo().y
获取。
但是lua版本直接ccs.Bone:getWorldInfo()得到是数据里面没有导出x,y等属性

可以说使用一下方法自己在C++里导出:

在C++的AppDelegate.cpp里的最上边定义一下方法(还需要#include “LuaBasicConversions.h”)
int getCCSBonePos(lua_State *
l){ cocostudio::Bone *
bone=(cocostudio::Bone *)tolua_tousertype(
l,1,0); cocostudio::BaseData *
da=
bone->getWorldInfo(); vec2_to_luaval(
l,cocos2d::Vec2(
da->x,
da->y)); return 1;}
然后在applicationDidFinishLaunching

方法里加上
auto
ls = LuaEngine::getInstance()->getLuaStack()->getLuaState(); lua_register(
ls,“getCCSBonePos”,getCCSBonePos);
编译C++部分

在lua里使用:
local pos=getCCSBonePos(bone)
print(pos.x,pos.y)

其中bone为ccs.Bone

这个帖子顶一下!
3.2版本的,直接在类里面加一个函数,用tolua++导出来使用
const cocos2d::Vec2& Bone::getPosition() const
{
BaseData *pData = getWorldInfo();
return Vec2(pData->x, pData->y);
}

不过我这个有问题:在vec2_to_luavalue里面会把数据写错,vec2的地址和lua的栈地址相差很远,还是会有影响,不知道是为什么?

现在估计是引用的问题,去掉引用就没有问题了,代码修改如下:
cocos2d::Vec2 Bone::getBonePosition() const
{
BaseData *pData = getWorldInfo();
return Vec2(pData->x, pData->y);
}

local pos = bone:convertToWorldSpace(cc.p(0,0))
这样可以获取到世界坐标