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

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

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

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

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

提前致谢!

【问题讨论】:

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

标签: file lua 2d-games love2d


【解决方案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" 的内容。然后,这些文件中的每一个都有自己的局部变量,该变量引用定义类或库的同一个表。
猜你喜欢
  • 2021-12-15
  • 2012-11-12
  • 2023-03-12
  • 1970-01-01
  • 2018-08-14
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
相关资源
最近更新 更多