Lua, Love2d, farklı klasörlerde aynı sınıf adına sahip iki oyun

0

Soru

Lua ve Love2d'de yeniyim, 2-3 basit oyun yaptım ve onları bir araya getirmek istedim. Hangi oyunu oynamak istediğinizi seçeceğiniz bir pencere açtım. Başarılı olur; küçük bir problemle. İki maçımda top kullanırım. Yani ikisinin de Topu var.lua Dosyası. Oyunlarımın her birine Top dosyasını yüklemek için require işlevini kullanıyorum. İlk başta işe yarıyor, Game1 oynayabilir, geri dönüp Game2 oynayabilirim. Ama geri dönüp oyunu tekrar oynamak istersem1. Top onun.lua Dosyası, yalnızca bir kez yüklenmesini gerektirdiğinden gerekli olmayacaktır. Sonra game1 oyunumun Game2 top Sınıfını kullanmaya çalıştığı için bir hata olacak.

Hangi çözümün en iyi olacağını bilmek istedim :

  1. Sadece dosyaları yeniden adlandırın. (Bundan kaçınmak istiyorum, bana sert kodluyor gibi geliyor)
  2. doFile kullanın. (Hiç kullanmadım, işe yarayıp yaramayacağını bile bilmiyorum)
  3. Ana menümde iki Topun Sınıfını isteyin ve her oyunu yüklerken parametre ile iletin (Bunun da işe yarayıp yaramayacağını bilmiyorum)

Daha fazla açıklama için kodumu görmek isterseniz, işte bağlantı : https://github.com/cbelangerstpierre/Games/tree/main/Games

Şimdiden teşekkürler !

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

En iyi cevabı

0

Bildiğiniz gibi, require her dosyayı yalnızca bir kez yürütecektir. Ancak aynı zamanda dosya dönüş değeri kaydedin böylece görebilirsiniz require dosya istediğiniz kadar çok kez ve yine de aynı değeri alır.

Senin içinde Ball.lua dosyalar, kendininkini yap Ball yerel beyanlar:

local Ball = Class{}

Sonra bu dosyaların altına ekleyin:

return Ball

Sonra, değiştir main.lua genel depolanacak dosyalar Ball değişken:

Ball = require "Atari-Breakout.Ball"

ve

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

İdeal olarak, tüm değişkenlerinizi yerel hale getirmeniz ve ihtiyacınız olan dosyalardan tablolar döndürmeniz önerilir require.

2021-11-23 20:50:02

İşe yaraması güzel ! Çok teşekkürler, Bunun yerine yerel değişkenleri kullanacağınızı söylüyorsunuz. Ama anlamıyorum, HER yerde yerel değişkenler kullanır mıydı ? Ball = require yaptığımı söylediğinde olduğu gibi, küresel değil mi ?
Cédric Bélanger-St-Pierre

Evet, kodunuzdaki değişiklikleri en aza indirmek için bu şekilde yazdım. Normalde şöyle bir şey koyardın local Ball = require "Atari-Breakout.Ball" top sınıfını kullanan her dosyanın en üstüne yakın. Daha sonra bu dosyaların her biri, sınıfı veya kitaplığı tanımlayan aynı tabloya başvuran kendi yerel değişkenine sahip olacaktır.
luther

Diğer dillerde

Bu sayfa diğer dillerde

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