Love2D:在love.load中创建变量与在main.lua文件顶部创建变量有何区别?

如果您查看[love.load](https://love2d.org/wiki/love.load)的文档,它会说

这个函数在游戏开始时仅调用一次。

除此之外,它没有其他任何信息。 它还有一个参数,即命令行参数。

因此,如果您不使用参数,则以下两个之间有何区别:

x = 5

-- rest of code

function love.load()
  x = 5
end

-- rest of code

避免使用 love.load 的最大好处是可以使 x 变成局部变量而不是全局变量。 是否有使用 love.load 的好处?

点赞
用户1442917
用户1442917

我认为对于简单值(例如您在示例中展示的值),没有任何区别,但是对于使用love.graphics或其他组件的更复杂的代码,需要从love.load中执行,因为它保证引擎在那个时候已经被正确设置和初始化了。

2016-10-17 20:56:07
用户7114852
用户7114852

就像你自己所说的,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!”两次。

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

2016-11-04 12:09:42
用户7170955
用户7170955

在运行 main.lua 之后,Love 会调用 love.run,其中包含主游戏循环。love.run 的第一件事情之一,就是调用 love.load(...)... 包含游戏的命令行参数,这些参数可能会对你有用。

这意味着,love.load 在所有 main.lua 代码之后运行,但早于 love.drawlove.update 等开始被调用。

这个特性的价值,主要取决于你自己。

2016-12-02 04:31:41