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,不同文件夹下两个类名相同的游戏的主要内容,如果未能解决你的问题,请参考以下文章