Lua, Love2d, две игры с одинаковым именем класса в разных папках

0

Вопрос

Я новичок в Lua и Love2D, я сделал 2-3 простых игры и хотел собрать их вместе. Я сделал окно, в котором вы выбираете, в какую игру вы хотите играть. Это удается; с небольшой проблемой. В двух моих играх используется мяч. Так что у обоих есть файл Ball.lua. Я использую функцию require для загрузки файла с мячом в каждой из моих игр. Сначала это работает, я могу играть в игру 1, вернуться и играть в игру 2 без каких-либо проблем. Но если я вернусь и захочу снова поиграть в Игру 1. Его файл ball.lua не потребуется, так как требуется загрузить только один раз. Тогда возникнет ошибка, так как моя игра1 пытается использовать класс мяча моей игры 2.

Я хотел знать, какое решение было бы лучшим :

  1. Просто переименуйте файлы. (Я хотел бы избежать этого, мне кажется, что это сложно)
  2. Используйте doFile. (Я никогда им не пользовался, я даже не знаю, сработает ли это)
  3. Требуйте двух классов мяча в моем главном меню и передавайте его по параметру при загрузке каждой игры (не знаю, сработает ли это тоже).

Если вы хотите увидеть мой код для более подробного объяснения, вот ссылка : https://github.com/cbelangerstpierre/Games/tree/main/Games

Заранее спасибо!

2d-games file love2d lua
2021-11-23 17:13:24
1

Лучший ответ

0

Как вы знаете, require будет выполняться каждый файл только один раз. Однако он также сохранит возвращаемое значение файла, чтобы вы могли require файл столько раз, сколько вы хотите, и все равно получите то же значение.

В вашем Ball.lua файлы, сделайте свой Ball декларации местные:

local Ball = Class{}

Затем в нижней части этих файлов добавьте:

return Ball

Затем измените свой main.lua файлы для хранения в глобальном Ball переменная:

Ball = require "Atari-Breakout.Ball"

и

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

В идеале рекомендуется сделать все ваши переменные локальными и возвращать таблицы из файлов, которые вам нужны require.

2021-11-23 20:50:02

О, как хорошо, что это сработало ! Большое спасибо, Вы говорите, что вместо этого использовали бы локальные переменные. Но я не понимаю, будут ли везде использоваться локальные переменные ? например, когда вы говорите, что я делаю мяч = требуется, разве это не глобально ?
Cédric Bélanger-St-Pierre

Да, я написал это таким образом, чтобы свести к минимуму изменения в вашем коде. Обычно вы ставите что-то вроде local Ball = require "Atari-Breakout.Ball" в верхней части каждого файла, в котором используется класс Ball. Тогда каждый из этих файлов будет иметь свою собственную локальную переменную, которая ссылается на ту же таблицу, которая определяет класс или библиотеку.
luther

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................