Я хочу чтобы для некоторых уровней были скрипты в отдельном файле, не писать же в код всего движка обработку действий какого-нибудь босса который встречается только на одном уровне. как это сделать?
а можно ли менять этот файл со скриптами от уровня к уровню? и я так понимаю если пропишу в update
boss
оно будет работать примерно также как если бы я скопировал код из boss.lua на место строки boss?
В двух словах, да, выполняется код модуля и возвращается результат, словно это вызов функции. Но последующий require уже не будет выполнять код, а вернёт закешированное значение с первого вызова.
Также вам ничто не мешает разнести свои существующие функции по модулям просто для удобства, без заморочек о том, как именно работает require.
Валерий Альбертович Жмышенко, нет, script = nil ничего не даст.
Можно смело делать сначала script = require "scripts1.lua"
потом script = require "scripts2.lua"
и т.д.
Но если сделать ещё раз: script = require "scripts1.lua"
То будет взято значение из кеша (по ключу "scripts1.lua").
То есть каждый файл будет загружен не более одного раза.
Кроме того, всё глобальное из scripts1.lua будет глобально доступно и в main (естественно, после require).
P.S. А документацию вы решили не читать? Как по мне, глянуть самому - быстрее, чем ждать ответа, которого можно и не дождаться (гарантии ответа здесь нет).
Можно же просто в scripts1.lua объявить глобальную функцию LoadScript1().
И далее вызывать её каждый раз, когда вам нужно "загрузить" этот уровень.
Это выглядит красивее, чем заново загружать уже загруженный файл.
Тогда кеширование будет работать на вас. После загрузки уровня, его не нужно будет загружать заново. Ну, как минимум, код. А прочие ресурсы уже можно подумать, как освобождать, и нужно ли вообще, смотря как много весят и как устроена игра.
с другой стороны у меня весь main.lua весит всего 10кб, значит всякие скрипты будут весить ещё меньше, не думаю что лишние даже 20 мегабайт на что-то повлияют, учитывая что сейчас даже в самых простых ПК памяти 4 гигабайта минимум
почему когда я прописываю script = require "scripts.1" всё работает, а если пишу "scripts."..levelNumber выдаёт ошибку?
spoiler
Error
main.lua:356: module 'scripts.' not found:
no field package.preload['scripts.']
no 'scripts/' in LOVE game directories.
no file 'scripts/' in LOVE paths.
no file '.\scripts\.lua'
no file 'C:\Program Files\LOVE\lua\scripts\.lua'
no file 'C:\Program Files\LOVE\lua\scripts\\init.lua'
no file '.\scripts\.dll'
no file 'C:\Program Files\LOVE\scripts\.dll'
no file 'C:\Program Files\LOVE\loadall.dll'
no file '.\scripts.dll'
no file 'C:\Program Files\LOVE\scripts.dll'
no file 'C:\Program Files\LOVE\loadall.dll'
Traceback
[C]: in function 'require'
main.lua:356: in function 'levelLoad'
main.lua:11: in function 'load'
[C]: in function 'xpcall'
[C]: in function 'xpcall'