【问题标题】:Calling Lua Functions From C++从 C++ 调用 Lua 函数
【发布时间】:2014-09-01 14:46:46
【问题描述】:

我正在使用最新版本的 LuaJit,需要一些帮助才能开始使用。我需要的是让一堆函数暴露给 Lua 环境,这些函数可以在脚本中被覆盖以运行用户提供的代码,然后在 C++ 中的设置事件期间调用这些函数

例如,当用户按下 TAB 键时,它会调用 lua 环境中的函数,例如 OnScoreboardOpen(),当用户释放 TAB 键时,它会调用相应的函数 OnScoreboardClose(),这些函数可以附加像 Game 或 GM 这样的元方法。

有人可以指点我一些教程或示例代码来说明如何实现这一点吗? 非常感谢您的宝贵时间。

【问题讨论】:

    标签: c++ c++11 lua meta-method


    【解决方案1】:

    基本上你使用这两个函数:lua_pushXXX 和 lua_pcall

    取决于你如何命名 LUA 函数,它可以是普通函数或对象方法。 即

    function OnScoreboardOpen()
    end
    

    function Game:OnScoreboardOpen()
    end
    

    使用plain函数还是比较简单的,直接做吧:

    // TODO: sanity check
    lua_getglobal(L, name);
    lua_pushnumber(L,123);
    lua_pcall(...);
    

    【讨论】:

    • 非常感谢,我确实需要使用元方法来保持一切井井有条。我将进一步研究这些功能。关于使用元方法有什么建议吗?
    • 视情况而定。对于像全球游戏设施这样的单身人士,您不需要太多的组织。但例如,我自己的 UI 引擎,我有层次结构的小部件。一些纯 OO 的人可能将 lua 函数命名为 panelA:buttonB:onClick(button,modifier) 而我选择做 panelA_buttonB:onClick(button,modifier) 并使一切平坦以降低解析包含 onClick 的对象的复杂性。
    • 顺便说一句,要使用对象的元方法,您只需在顶级名称上执行 lua_getglobal,然后使用 lua_getfield 遍历对象树。另外我应该提到有许多现成的库也可以做到这一点。
    猜你喜欢
    • 2013-02-19
    • 2015-12-30
    • 2022-01-04
    • 2015-07-14
    • 1970-01-01
    • 2021-04-15
    • 2015-02-12
    • 2018-08-31
    相关资源
    最近更新 更多