Я начинающий пользователь Lua, я пытаюсь создать что-то в Lua, используя библиотеки Love2D.Использование таблиц Lua в качестве двумерных массивов
В функции загрузки я создаю таблицу и загружаю ее с элементами (которые являются числами) для использования позже в качестве многомерного массива.
function love.load()
Maximum_X = 32
Maximum_Y = 16
Start_X = 64
Start_Y = 32
MapTable = {} -- empty table
for i=1,Maximum_X*Maximum_Y do -- uploading table
table.insert(MapTable, 2)
end
end
Затем я создаю функцию, которая вносит изменения в таблицу. Поскольку я просто экспериментирую с таблицами, есть только одно измененное значение. По крайней мере, подумал я.
function KatamoriGen()
MapTable[4] = 3
end
function love.update(dt)
KatamoriGen()
end
После этого я печатаю элементы таблицы в матрице с 32 столбцами и 16 строками. Я вижу здесь, что изменяется не только 4-й элемент 1-го ряда, но и 2-й элемент 2-го ряда, а 1-й элемент 4-го ряда становится 3.
Это, очевидно, означает, что Table[posX*posY]
не работает ни с момента умножение число, например 4
и операция будет меняться каждые элементы, где
X coordinate + Y coordinate = posX*posY
является истинным. В примере кода правая часть этого уравнения была равна 4.
Небольшой вопрос: почему это происходит?
Главный вопрос: как я могу точно идентифицировать элементы MapTable
? Как я могу реализовать размеры X и Y для таблиц Lua? использовать их в качестве двумерных массивов? Может быть, таблица столов?
EDIT: это функция рисования:
function love.draw()
for j=1,16 do
for i=1,32 do
love.graphics.draw(Tileset[MapTable[j*Maximum_X + i]], Start_X + 32*(i-1), Start_Y + 32*(j-1))
end
end
end
Теперь для меня ясно, что это неправильно и право правило MapTable[j*Maximum_X + i]
, но я получаю сообщение об ошибке для этого: «ожидаемый тип параметра: ожидается, пользовательские данные»
Не могли бы вы отправить весь свой код, пожалуйста? В частности, бит, в котором выполняется печать. В его нынешнем виде функции загрузки и обновления будут работать так, как вы ожидаете, например, просто обновляя одно значение (хотя оно будет повторяться в цикле обновления) – Alex
Кажется, что я напортачил. В следующем примере: 'function love.draw()', то есть петля в другом цикле, чтобы создать матрицу, и это тело самого замкнутого цикла: 'love.graphics.print (MapTable [i * j], Start_X + 32 * (i-1), Start_Y + 32 * (j-1)) ' И« конец »после этого, из. Теперь мне ясно, что это неправильно, и правильное правило - «MapTable [j * Maximum_X + i]», но я получаю для него ошибку: «ожидаемый тип параметра: ожидаемый пользовательский указатель» Чтобы быть понятным, он также размещен в ОП. –
Попробуйте MapTable [(j-1) * Maximum_X + i].Таким образом, он начинается с индекса 1, а не Maximum_X + 1 – Alex