Я хотел бы прочитать файл Lua в редакторе уровней, чтобы я мог отображать его данные в визуальном формате для редактирования пользователями.
Если у меня есть таблица Lua, например, так:
properties = {
Speed = 10,
TurnSpeed = 5
}
Speed
очевидно, ключ и 10
Значение. Я знаю, что могу получить доступ к значению, если знаю такой ключ (при условии, что таблица уже находится в стеке):
lua_pushstring(L, "Speed");
lua_gettable(L, idx);
int Speed = lua_tointeger(L, -1);
lua_pop(L, 1);
То, что я хочу сделать, это получить доступ к имени ключа и соответствующему значению в C ++. Можно ли это сделать? Если да, то как мне это сделать?
Это покрыто lua_next
функция, который перебирает элементы таблицы:
// table is in the stack at index 't'
lua_pushnil(L); // first key
while (lua_next(L, t) != 0)
{
// uses 'key' (at index -2) and 'value' (at index -1)
printf("%s - %s\n", luaL_typename(L, -2), luaL_typename(L, -1));
// removes 'value'; keeps 'key' for next iteration
lua_pop(L, 1);
}
lua_next
ключи от ключа таблицы, так что вам нужно держать это в стеке во время итерации. Каждый вызов будет переходить к следующей паре ключ / значение. Как только он возвращает 0, тогда все готово (и пока клавиша была нажата, следующая не была нажата).
Очевидно, что добавление или удаление элементов в таблице, по которой вы выполняете итерацию, может вызвать проблемы.
Других решений пока нет …