Lua,Love2d,不同文件夹下两个类名相同的游戏

Posted

技术标签:

【中文标题】Lua,Love2d,不同文件夹下两个类名相同的游戏【英文标题】:Lua, Love2d, two games with the same class name in different folders 【发布时间】:2022-01-02 04:35:48 【问题描述】:

我是 Lua 和 Love2D 的新手,我做过 2-3 款简单的游戏,我想把它们放在一起。我做了一个窗口,您可以在其中选择要玩的游戏。它成功了;有一个小问题。我的两场比赛都使用球。所以两者都有一个 Ball.lua 文件。我使用 require 函数在我的每个游戏中加载 Ball 文件。一开始可以,我可以玩游戏1,回去玩游戏2没有任何问题。但是如果我回去想再次玩Game1。他的 ball.lua 文件将不需要,因为只需要加载一次。然后会出现错误,因为我的游戏 1 正在尝试使用我的游戏 2 的球类。

我想知道哪种解决方案最好:

    只需重命名文件即可。 (我想避免它,感觉硬编码) 使用 doFile。 (我没用过,不知道能不能用) 在我的主菜单中需要两个 Ball 的类,并在加载每个游戏时通过参数传递(不知道它是否也可以工作)

如果您想查看我的代码以获得更多解释,请点击以下链接:https://github.com/cbelangerstpierre/Games/tree/main/Games

提前致谢!

【问题讨论】:

两个同名文件没有问题,在执行代码时我也没有收到关于这个问题的错误。它因为不同的东西而崩溃。看来您在第二次运行之前没有正确清理。 【参考方案1】:

如您所知,require 只会执行每个文件一次。但是,它也会保存文件的返回值,因此您可以根据需要多次require 文件,并且仍然获得相同的值。

在您的 Ball.lua 文件中,将您的 Ball 声明设为本地:

local Ball = Class

然后在这些文件的底部添加:

return Ball

然后,更改您的 main.lua 文件以存储到全局 Ball 变量:

Ball = require "Atari-Breakout.Ball"

Ball = require("Switching-Ball.Ball")

理想情况下,建议将所有变量设为本地变量,并将所需文件中的表返回到require

【讨论】:

哦,很好用!非常感谢,你说你会使用局部变量。但我不明白,会在任何地方使用局部变量吗?就像你说我做 Ball = 要求,这不是全球性的吗? 是的,我这样写是为了尽量减少对代码的更改。通常,您会在每个使用 Ball 类的文件的顶部附近放置类似 local Ball = require "Atari-Breakout.Ball" 的内容。然后,这些文件中的每一个都有自己的局部变量,该变量引用定义类或库的同一个表。

以上是关于Lua,Love2d,不同文件夹下两个类名相同的游戏的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Lua (Love2D) 的库中定义一个类?

love2d lua中的鼠标按下错误

使用 Lua 在 Love2D 中需要一个共享对象 (.so) 文件

LOVE2D-02-Hello World

LOVE2D-03-完整的LOVE2D程序

Love2D(Lua)中的面向对象编程