#c #c #lua
#c #c #lua
Вопрос:
Я пишу систему материалов для игрового движка, над которым я работаю, где сценарий Lua в основном используется в качестве конфигурационного файла для материала.
Я сохраняю значения в таблице, но для векторных значений ( vec2
, vec3
, и т.д.) Я встраиваю таблицу внутри основной таблицы для хранения нескольких значений, например:
material = {
color = {0.2, 0.3, 1}
}
Я хочу получить отдельные значения color
, и это то, что я пытался получить для первого значения:
lua_getglobal(L, "material");
if (!lua_istable(L, -1)) {return;};
lua_pushstring(L, "color");
lua_gettable(L, -2);
if (lua_istable(L, -1)) {
lua_rawgeti(L, -1, 0);
printf("%fn", lua_tonumber(L, -1));
}
lua_pop(L, 1);
Но он только когда-либо печатает 0.0
, независимо от первого значения в color
таблице. Что я делаю не так?
Ответ №1:
Первый индекс должен быть 1
, а не 0
.
lua_rawgeti(L, -1, 1);
Комментарии:
1. О, спасибо. Я не понимал, что массивы начинаются с 1 вместо 0 в Lua!
2. На самом деле, индексы начинаются с 1 в Lua. В C API Lua, использующем индексы, вам также необходимо соблюдать это соглашение, поэтому первый индекс будет равен 1. Вы все равно можете поместить значение с индексом 0 в Lua, но это не рекомендуется, и некоторые функции не будут работать должным образом.