代码之家  ›  专栏  ›  技术社区  ›  Qubeuc

如何在c中使用luabind传递和更新对象++

  •  4
  • Qubeuc  · 技术社区  · 14 年前

    我试图将脚本机制集成到我现有的项目中,但是我无法理解如何将对象通过Luabink传递给Lua。

    例如,我有一个实体类,我想在lua文件中更新它们。

    #include <stdio.h>
    #include <ctime>
    #include <iostream>
    #include <string>
    #include <list>
    using namespace std;
    
    extern "C"
    {
        #include "lua.h"
        #include "lauxlib.h"
        #include "lualib.h"
    }
    
    #include <luabind/luabind.hpp>
    
    
    class Entity
    {
        public:
    
            Entity(){}
            ~Entity(){}
    
            void setSpeed(double adSpeed){m_dSpeed = adSpeed;}
            void setPosition(double adPosition){m_dPosition = adPosition;}
    
            double getSpeed(){return m_dSpeed;}
            double getPosition(){return m_dPosition;}
    
        private:
    
            double m_dSpeed;
            double m_dPosition;
    
    };
    
    int main() {
    
    
        // Create a new lua state
        lua_State *myLuaState = lua_open();
        // Connect LuaBind to this lua state
        luabind::open(myLuaState);
    
        // Export our class with LuaBind
        luabind::module(myLuaState) [
            luabind::class_<Entity>("Entity")
                .def(luabind::constructor<void>())
                .property("m_dSpeed", &Entity::getSpeed, &Entity::setSpeed)
                .property("m_dPosition", &Entity::getPosition, &Entity::setPosition)
        ];
    
    
    
        luabind::object table = luabind::newtable(myLuaState);
    
    
        Entity* entity1 = new Entity;
    
        table["Entity1"] = entity1;
    
        //How to pass entity object to lua
    
        luabind::luaL_dofile(myLuaState, "UpdatePosition.lua");
    
        lua_close(myLuaState);
    
        return 1;
    }
    

    这是代码,我想学习的是将实体对象和时间值传递给lua,并使用它们的速度和增量时间更新它们的位置。

    1 回复  |  直到 14 年前
        1
  •  4
  •   sbk    14 年前
    luabind::globals(myLuaState)["entities"] = table;
    

    基本上, luabind::globals(lua) 返回 _G 可以像往常一样操作的lua表。