Как передавать и обновлять объекты с помощью luabind в c ++ - PullRequest
4 голосов
/ 30 июня 2010

Я пытаюсь интегрировать механизм сценариев в существующий проект. Однако я не мог понять, как передавать объекты в lua с помощью luabind.

Например, у меня есть класс сущностей, и я хочу обновить их в файлах 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 Ответ

4 голосов
/ 30 июня 2010
luabind::globals(myLuaState)["entities"] = table;

По сути, luabind::globals(lua) возвращает таблицу _G lua, которой вы можете управлять как обычно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...