Lua没有返回我的userdata。
2014-6-13 14:23:21
收藏:0
阅读:69
评论:1
我遇到了一些意外问题,涉及到我的userdata和newuserdata。送给C ++的数据与我创建userdata时存储的数据不同。下面是与创建有关的所有函数以及我正在调用的函数(
我用这段lua代码创建我的头像 :avatar = avatar_create(“hero1”)
在C ++中,是这样的
int LuaObjectFactory :: createAvatar(lua_State * L){
自动头像 =新头像(lua_tostring(L,1)); //0x011afd20
自动userdata = Util :: luaP_newuserdata <Avatar>(L,avatar); //0x011a4a18
luaP_getScenes(L)-> getActiveScene()-> addEntity(avatar);
Util :: luaP_setmetatable(L,Avatar :: lGetMetatable());
返回1;
}
template <typename T> T ** luaP_newuserdata(lua_State * L,T * data){
T ** o = static_cast <T **>(lua_newuserdata(L,sizeof(T *)));
//不复制数据,仅记住对它的引用
* o =数据;
返回O;
}
inline void luaP_setmetatable(lua_State * L,const string&metatable){
luaL_getmetatable(L,&metatable [0]);
lua_setmetatable(L,-2);
}
template <typename T> T * luaP_touserdata(lua_State * L,int idx){
return * static_cast <T **>(lua_touserdata(L,idx));
}
然后再后来,我尝试使用此lua代码调用Avatar的函数
avatar = avatar_create(“hero1”)
avatar:setPosition(12,10)
avatarPos = avatar:getPosition()
会调用这两个函数
template <typename T> static int lGetPosition(lua_State * L){
auto p = Util :: luaP_touserdata <T>(L,1); //0x008ff0d8
auto v = p->getPosition();
lua_pushnumber(L,v.x);
lua_pushnumber(L,v.y);
返回0;
}
template <typename T> static int lSetPosition(lua_State * L){
auto p = Util :: luaP_touserdata <T>(L,1); //0x008ff0d8
auto v = Math :: Vector2(static_cast <int>(lua_tonumber(L,2)),
static_cast <int>(lua_tonumber(L,3)));
p->setPosition(v);
返回0;
}
我注释了一个尝试调试的内存地址。 luaP_touserdata返回相同的地址,尽管即使在稍后尝试获取它们时,我在0x008ff0d8 中设置的值也已被删除。
还有一件我注意到的事情是0x008ff0d8的地址是指向指针的指针,指回0x008ff0d8。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
你为什么不使用专门的绑定层,例如luabridge 或 luabind?在面对代码混乱时,许多绑定库已经有效解决了低级问题。
甚至有些使用现代 c++ 的绑定库,例如 Selene 和 LuaGlue,或者是luawrapper和luapp11。