В сообщении об ошибке сообщается, что в строке 69 имеется ошибка. Интерпретатор Lua жалуется, что вы поместили значение nil в функцию table.remove вместо ожидаемого значения таблицы.
Итак, давайте получимlooik в вашем коде:
-- removes bullet when out of sight or moves bullets forward
for i, b in ipairs(b.bullets) do
if bullet.x >= 0 then
table.remove(b.bullets, i)
end
bullet.x = bullet.x + 5
end
Вы перебираете таблицу b.bullets
и сохраняете текущее значение в переменной b
, локальной для цикла for.Это означает, что внутри цикла for у вас больше нет доступа к вашей глобальной таблице b
, которая содержит таблицу bullets
.
Поскольку в вашем локальном b
нет члена с именем bullets
, b.bullets
- это нулевое значение внутри цикла for.
Использование table.remove для таблицы, которую вы перебираете с помощью ipairs, также не будет работать.Допустим, у вас есть такая таблица:
a = {1,2,3,4,5}
, и вы делаете это
for i,v in ipairs(a) do
table.remove(a, i)
end
При первом запуске с использованием индекса 1 вы удалите 1, что приведет к созданию новой таблицы{2,3,4,5}
.В следующем цикле, используя индекс 2, вы удалите 3 вместо 2, так как 3 теперь ваш второй элемент.После удаления 3 ваш стол {2,4,5}
.В следующем раунде с индексом 3 вы удалите 5 из таблицы.Поскольку это был последний элемент в вашей таблице, цикл выполняется после 3 итераций вместо 5, и в итоге в таблице останется 2 элемента, а не 0.
Существуют и другие проблемы с вашим кодомно я советую вам сначала убедиться, что вы понимаете область действия переменных в Lua, прежде чем продолжить.