Lua、Love2d:不同文件夹中具有相同类名的两个游戏

我新学习 Lua 和 Love2D,做了两三个简单的游戏,想把它们组合起来。我创建了一个窗口,在其中选择要玩的游戏。成功了,但有一个小问题。我的两个游戏都使用了一个叫 Ball.lua 的文件。我使用 require 函数在我的每个游戏中加载这个 Ball 文件。起初它是有效的,我可以玩 Game1,然后返回并玩 Game2,没有任何问题。但是,如果我返回并想再次玩 Game1,Ball.lua 文件就不会被加载,因为 require 只会加载一次。然后会有错误,因为 Game1 正试图使用 Game2 的 ball 类。

我想知道最好的解决方案是什么:

  1. 只需将文件重命名。 (我不想这样做,感觉是硬编码)
  2. 使用 doFile。(我从未使用过,甚至不知道它是否有效)
  3. 在我的主菜单中要求这两个 Ball 的类,并在加载每个游戏时通过参数传递它们(也不知道是否有效)

如果您想更多地了解我的代码,请看这里:https://github.com/cbelangerstpierre/Games/tree/main/Games

先感谢您!

原文链接 https://stackoverflow.com/questions/70085047

点赞
stackoverflow用户3574628
stackoverflow用户3574628

如你所知,require 只会执行每个文件一次。但它也会保存文件的返回值,所以你可以多次 require 文件并仍然获得相同的值。

在你的 Ball.lua 文件中,将你的 Ball 声明为 local:

local Ball = Class{}

然后在文件底部添加:

return Ball

接着,将你的 main.lua 文件修改为存储到全局 Ball 变量中:

Ball = require "Atari-Breakout.Ball"

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

理想情况下,建议将所有变量设为 local,并从你需要 require 的文件中返回表格。

2021-11-23 20:50:02