Love2D: в чем разница между созданием переменных внутри love.load, а не в верхней части файла main.lua?

Если вы посмотрите на документы для love.load, там написано

Эта функция вызывается ровно один раз в начале игры.

и ничего больше на самом деле. Также у него есть один параметр, который является аргументами командной строки.

Итак, если вы не используете аргументы, в чем разница между:

x = 5

-- rest of code

а также

function love.load()
  x = 5
end

-- rest of code

Самое большое преимущество отказа от love.load заключается в том, что вы можете сделать x локальным, а не глобальным. Есть ли преимущества в использовании love.load?


person m0meni    schedule 17.10.2016    source источник


Ответы (3)


Я не думаю, что есть какая-то разница для простых значений (например, то, что вы показываете в своих примерах), но более сложный код, использующий love.graphics или другие компоненты, должен выполняться из love.load, поскольку это гарантирует, что движок правильно настроен и инициализирован. к тому времени.

person Paul Kulchenko    schedule 17.10.2016

После запуска main.lua Лав вызывает love.run, который содержит основной игровой цикл. Одна из первых вещей, которые делает love.run, — это вызов love.load(...), где ... содержит аргументы командной строки для вашей игры, которые могут оказаться полезными.

Это означает, что love.load запускается после всего вашего кода main.lua, но до того, как начнут вызываться love.draw, love.update и подобные.

Какую ценность это имеет, в основном зависит от вас.

person ATaco    schedule 02.12.2016

Как вы сами сказали, love.load() запускается только один раз в начале и поэтому идеально подходит для инициализации переменных. Все, что установлено за пределами этой функции, может загружаться чаще.

Попробуйте создать файл conf.lua и активируйте консоль. Затем напечатайте () что-нибудь за пределами love.load (), и вы увидите.

-- conf.lua
function love.conf(t)
  t.console = true
end

-- main.lua
print("Hello World!")
function love.load()
end

Для меня он всегда печатал «Hello World!» два раза при запуске игры.

Как и сказал Пол Кульченко, с простыми значениями это может не иметь никакого значения, но вы никогда не узнаете... ;)

person nehegeb    schedule 04.11.2016