Небольшая справочная информация: я создаю генератор бесконечного мира с Lua.Когда игрок движется вправо, новые плитки появляются справа, а плитки вне поля зрения (слева) исчезают.Я установил крайние левые плитки на {}
или nil
(я пробовал оба), чтобы удалить их.Когда игрок продолжает двигаться вправо, происходит значительное снижение производительности.Я могу восстановить производительность, просто установив для всей таблицы карты значение {}
. Обратите внимание на следующее: предположим, что их методы заполнены.Они не важны :
world = {
tiles = {}
}
-- make world.tiles a 2D array of tiles
function createWorld()
-- ...
end
-- remove left-most tiles, add right-most tiles
function onMovesRight()
-- ...
end
-- remove all tiles
function destroyWorld()
-- ...
end
После выполнения некоторых тестов при значительном снижении производительности я обнаружил следующее при удалении всех плиток:
1. не восстанавливает производительность:
function recover()
destroyWorld()
world.tiles = {}
createWorld()
end
2. Восстанавливает производительность
function recover()
destroyWorld()
world = {
tiles = {}
}
createWorld()
end
Почему второй вышеописанный метод восстанавливает производительность моей программы Lua, а не первый?