首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将现有/创建/实例化的类对象推送到Lua脚本上?

如何将现有/创建/实例化的类对象推送到Lua脚本上?
EN

Stack Overflow用户
提问于 2012-11-11 20:23:06
回答 1查看 1K关注 0票数 2

大多数绑定库/包非常清楚如何公开类类型,以便可以在Lua脚本上创建类类型。

我真正感到困难的是,如何将已经创建/实例化/分配的类对象交给Lua脚本,这样您就可以从Lua脚本调用其公开/绑定的方法(在c++端也更新对象)。

如果这还不清楚的话,我会给出一个真实的例子,那就是我现在的情况。

我使用月月向Lua公开我的AIAgent类方法。它的工作,我可以在Lua script..But上创建 AIAgents,我不是在Lua上编程,我使用lua来编写我的AI代理脚本,这是我的游戏引擎的一部分,由我的游戏引擎创建,更新/碰撞检测和响应/绘制都是由c++代码完成的,脚本应该做的唯一事情就是给代理提供决策代码(在代理更新方法上称为Lua coroutine )。此决策脚本可以访问一些已注册的方法(GetHP、GetNAmmunition、GetPlayerPos等)。)

那么,我如何才能这样给脚本我的object?..Something:

代码语言:javascript
复制
//-fake code- called on the AIAgent constructor, or something
lua_pushObject( luaState, this );
lua_setGlobal( "aiAgentFromC++", -1 ); // object exposed trough "aiAgentFromC++" global var

注意,这些方法已经公开了,因为我可以在脚本上创建新的对象,我只是不知道如何给脚本一个我已经在c++上拥有的对象。

EN

回答 1

Stack Overflow用户

发布于 2012-11-11 20:41:20

在我看来,LuaBridge是最简单的方法。它也是轻量级和无依赖的。你是说:

我真正有困难的是如何给Lua脚本一个已经创建/实例化/分配的类对象。

它确实做到了

样本: C++

代码语言:javascript
复制
class A {
public:
    void print(int x) {
        std::cout<<x<<std::endl;
    }
};

RefCountedPtr<A> GiveMeA()
{
    static RefCountedPtr<A> a(new A);
    return a;
}

int main() 
{
    lua_State *L = lua_open();
    luaL_openlibs(L);
    int s = luaL_loadfile(L, "test.lua");

    luabridge::getGlobalNamespace(L)
        .beginClass<A>("A")
        .addConstructor<void (*)()>()
        .addFunction("print",&A::print)
        .endClass()
        .addFunction("GiveMeA",&GiveMeA);

    if ( s==0 ) {
        s = lua_pcall(L, 0, LUA_MULTRET, 0);
    }
    report_errors(L, s);
    lua_close(L);
}

在卢阿:

代码语言:javascript
复制
local a=A()
a:print(42)
local b=GiveMeA() --created on the C++ side
b:print(42)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13335066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档