gpt4 book ai didi

c++ - 如何从 C++ 监听 Lua 中的特定函数调用?

转载 作者:行者123 更新时间:2023-11-30 04:59:21 30 4
gpt4 key购买 nike

假设我有以下 Lua 代码。

function touched(x, y)
end
function moved(x, y)
end
function released(x, y)
end

这些函数是通过 lua_pcall 从 C++ 调用的,所以我也可以在 C++ 中监听这些事件。

但我想知道是否可以添加一个监听器,根据 C++ 中函数的名称监听特定的 Lua 函数。

比如在C++中可以是这样的

lua_addlistener(L, "touched", this, &MyClass::touchedFromLua);

然后就可以监听Lua代码中的touched函数了。 (如果“touched”函数存在)

这有可能做类似的事情吗?

最佳答案

您可以用您自己的函数替换该函数,然后在该函数中处理监听器后调用原始函数:

lua_getglobal(L, "touched");
lua_pushlightuserdata(L, this);
lua_pushcclosure(L, &MyClass::touchedFromLua, 2);
//add original function and this as upvalues
lua_setglobal(L, "touched");

touchedFromLua 必须是静态的并且看起来像这样:

int MyClass::touchedFromLua(Lua_State *L){
int args = lua_gettop(L);
MyClass* thiz = std::reinterpret_cast<MyClass*>(lua_touserdata(lua_upvalueindex(2)));
thiz->touchedFromLua_nonstatic(L);

lua_pushvalue(lua_upvalueindex(1));
lua_insert(L, 1);
lua_call(L, args , LUA_MULTRET);
int rets = lua_gettop(L);
return rets;
}

关于c++ - 如何从 C++ 监听 Lua 中的特定函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51262719/

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