Love2D:在 love.load 内部创建变量而不是在 main.lua 文件顶部创建变量有什么区别?

Love2D: what is the difference between creating variables inside love.load instead of at the top of the main.lua file?

如果您查看 love.load 的文档,它会说

This function is called exactly once at the beginning of the game.

除此之外别无其他。还有一个参数,就是命令行参数。

所以如果你不使用参数,有什么区别:

x = 5

-- rest of code

function love.load()
  x = 5
end

-- rest of code

避免 love.load 的最大好处是您可以将 x 设为局部而不是全局。使用 love.load 有什么好处吗?

我认为简单值(如您在示例中显示的内容)没有任何区别,但需要从 [=11 执行使用 love.graphics 或其他组件的更复杂代码=] 因为它保证到那时引擎已正确设置和初始化。

正如您自己所说,love.load() 只在开始时运行一次,因此非常适合初始化变量。在该函数之外设置的所有内容可能会更频繁地加载。

尝试创建一个 conf.lua 文件并激活控制台。然后 print() 在 love.load() 之外的东西,你会看到。

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

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

对我来说,它总是在开始游戏时打印两次 "Hello World!"。

就像 Paul Kulchenko 所说的那样,简单的值可能没有任何区别,但你永远不会知道...;)

main.lua 已经 运行 之后,Love 调用 love.run,它保持主游戏循环。 love.run 做的第一件事就是调用 love.load(...),其中 ... 保存游戏的命令行参数,您可能会发现它很有用。

这意味着 love.load 运行s 所有 main.lua 代码之后,但在 love.draw 之前,love.update,类似的开始被调用。

这有什么价值,主要取决于你自己。