gpt4 book ai didi

c++ - 我应该如何将 lua 函数绑定(bind)到 C++ 函数?

转载 作者:搜寻专家 更新时间:2023-10-31 01:19:40 25 4
gpt4 key购买 nike

我有一个名为 Entity 的类,它有许多函数,如 onPickup、onDrop、onUse 等。我想做的是,编写一个脚本来定义所有这些函数,并使它们可以从 C++ 函数中调用。因此,C++ 中定义的函数只会调用具有某些功能的相应 Lua 函数。

但这就是问题所在,我希望我为程序中的每个实体编写的每个脚本都在其自己的范围内工作。

我正在使用 LuaBind,之前没有使用 Lua 的经验,所以我在这里有点迷茫。

最佳答案

我不使用 lua bind 但这可能会有所帮助。这个想法是在你的 C++ 类中注册 lua 函数,并在你的 C++ 类中保留对 lua 函数的引用。

为了定义可从 C/C++ 调用的 lua 函数,我使用 luaL_ref 将对回调函数的引用存储在我的 C++ 对象中。

// a little helper function
template <typename T>
T *Lua_getUserData(lua_State *L) {
assert(lua_isuserdata(L, 1) == 1);
T **v = (T **) lua_touserdata(L, 1);
assert(v != NULL);
return *v;
}

int lua_FormRegisterMethods(lua_State *L) {
Entity *f = Lua_getUserData<Entity>(L);
assert(lua_istable(L, 2) == 1); // check the next parameter is a table
lua_pushvalue(L,2); // dup the table
f->LuaTable = luaL_ref(L, LUA_REGISTRYINDEX); // keep a reference to the table
lua_getmetatable(L, 2); // get the metatable
lua_pushstring(L, "OnClick");
lua_rawget(L, -2); // get the OnClick Lua Function
f->LuaMethod = luaL_ref(L, LUA_REGISTRYINDEX); // save a reference to it
return 0;
}

然后你就可以在你的C++事件中得到lua方法了

lua_rawgeti( LuaInstance->L, LUA_REGISTRYINDEX, LuaMethod );
assert(lua_isfunction(LuaInstance->L, -1) == 1);

现在您可以调用此函数并将 self 设置为您之前保存的表。

关于c++ - 我应该如何将 lua 函数绑定(bind)到 C++ 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5830001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com