Lua, Love2d, dwie gry o tej samej nazwie klasy w różnych folderach

0

Pytanie

Jestem nowy w Lua i Love2D, zrobiłem 2-3 proste gry i chciał zebrać je razem. Zrobiłem okno, w którym można wybrać, w jakie gry chcesz grać. To można; z małym problemem. W moich dwóch grach jest piłka. Tak, że u obu jest plik Ball.lua. Używam funkcji require do pobrania pliku z piłką w każdej z moich gier. Najpierw to działa, mogę grać w grę 1, wrócić i zagraj w grę 2 bez żadnych problemów. Ale jeśli wrócę i będę chciał ponownie zagrać w Grę 1. Jego plik ball.lua nie trzeba, tak jak chcesz pobrać tylko raz. Wtedy wystąpi błąd, tak jak moja игра1 próbuje użyć klasy piłki mojej gry 2.

Chciałem wiedzieć, jakie rozwiązanie byłoby najlepsze :

  1. Po prostu zmień nazwę plików. (Chciałbym tego uniknąć, wydaje mi się, że to trudne)
  2. Użyj doFile. (Ja nigdy nie używałem, nie wiem nawet, czy to zadziała)
  3. Wymaga dwóch klas piłki w moim menu głównym i oddane w opcji podczas uruchamiania każdej gry (nie wiem, czy to zadziała też).

Jeśli chcesz zobaczyć mój kod do bardziej szczegółowego wyjaśnienia, oto link : https://github.com/cbelangerstpierre/Games/tree/main/Games

Z góry dziękuję!

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

Najlepsza odpowiedź

0

Jak wiecie, require będzie działać każdy plik tylko raz. Jednak on również zachowa wartość zwracana pliku, aby można require plik tyle razy, ile chcesz, a i tak dostaniesz to samo znaczenie.

W pracy Ball.lua pliki, dokonaj Ball deklaracje lokalne:

local Ball = Class{}

Następnie w dolnej części tych plików należy dodać:

return Ball

Następnie zmień swój main.lua pliki do przechowywania w skali Ball zmienna:

Ball = require "Atari-Breakout.Ball"

i

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

Najlepiej zaleca się, aby wszystkie swoje zmienne lokalne i zwracać tabeli z plików, które są potrzebne require.

2021-11-23 20:50:02

O, jak dobrze, że to działa ! Dziękuję bardzo, Można powiedzieć, że zamiast tego używali zmienne lokalne. Ale nie wiem, czy wszędzie używane zmienne lokalne ? na przykład, kiedy mówisz, że robię piłka = wymagane, czy to nie jest globalnie ?
Cédric Bélanger-St-Pierre

Tak, napisałem to w taki sposób, aby zminimalizować zmiany w kodzie. Zazwyczaj postawisz coś takiego local Ball = require "Atari-Breakout.Ball" w górnej części każdego pliku, w którym jest używany klasa Ball. Wtedy każdy z tych plików będzie mieć własną zmienną lokalną, która odwołuje się do tej samej tabeli, która określa klasę lub biblioteki.
luther

W innych językach

Ta strona jest w innych językach

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