пятница, 16 июля 2010 г.

Передача таблицы в Lua

Нужно было написать функцию, которая бы передавала несколько переменных в Lua в виде таблицы. Немного погуглил и нашёл простой работающий способ. Покажу его на примере функции, возвращающей текущее положение спрайта на экране:

int l_SpriteGetActualPos(lua_State* L)
{
 String = CharToWString(lua_tostring(L, 1)); // Получаю имя спрайта в массиве 
 lua_pop(L,1); // удаляю имя спрайта из стека Lua
 lua_newtable(L); //создаётся новая таблица
 lua_pushstring(L,"X"); // добавляю в стек ключ "Х"
 lua_pushnumber(L,Sprites[String].TempPos.x); // добавляю в стек значение для ключа "Х"
 lua_rawset(L,-3); // записываю пару "значение-ключ" в таблицу
 lua_pushstring(L,"Y"); // добавляю в стек ключ "Н"
 lua_pushnumber(L,Sprites[String].TempPos.y); // добавляю в стек значение для ключа "Н"
 lua_rawset(L,-3);  // записываю пару "значение-ключ" в таблицу
 return 1;
}

Из Lua эта функция используется следующим образом:

local Pos = Sprite_GetActualPos("Sprite_Name") -- в Pos записывается указатель на таблицу
    -- доступ к таблице осуществляется так
    Pos.X = 10
    Pos.Y = 20 

Комментариев нет:

Отправить комментарий