Projeler karmaşık hale gelince, kodun nasıl organize edileceğini düşünmek önemlidir. İyi organizasyon pratikleri, kodun kaynak kodları arasında duplik olmadığından emin olabilir veya yönetmek zorlaşabilir.
Kodu düzenlemek ve yeniden kullanmak için daha iyi bir yol, modül skriptleri ile, paylaşımlı bir amaç için tasarlanmış bir set of işlevleri ve değişkenleri depolayan benzersiz bir tür script. Modül skriptleri içindeki kod, diğer kodlar tarafından kullanılabilir. Bu yol, her oyuncu bir gö
Modül kodlarında sık kullanılan kodu depolamak, değişikliklerin sadece bir modül koduna yapılmasını kolaylaştırır, böylece birden fazla kodu güncellemeye gerek yoktur.
Modül Kod Temelleri
Modül kaynakları aslında kaynakların kendi ayrı bir nesneye göre ayrı bir nesnedir. Roblox'ta, modül kaynaklarının bir mor simgegösterilmesi mümkündür.
Modül Kodu Oluşturulması
ModülScriptler genellikle SunucuScriptService ile birlikte yerleştirilir, sunucu tarafındaki kodlar tarafından kullanıldığında ve ReplicatedStorage kullanıcı tarafındaki yerel kodlar (örneğin GUI etkileşimleri) tarafından kullanıldığında.
- Create a ModülScript in Sunucu Depolama .
Modül Kodlarının Yapısı
Oluşturulduğunda, her modül scripti aşağıdaki kodla başlar:
local Module = {}return Module
Hatır local Module = {} , modülün paylaşılan işlevleri ve değişkenleri için bir tabolayı veya kapsayıcı kod kapsayıcı kapsayıcı kapsayıcı kapsayıcı kapsayıcı kapsayıcı kapsayıcı k
local RewardManager = {}return RewardManager
Böylece diğer scriptler modülün lokal olmayan işlevlerini veya değişkenlerini kullanabilir, her modülün MyModule dönüşüyle bitmesi gerekir. Herhangi bir başka script modülden kod almaya çalıştığında, dönüş, modül tablosunda saklanmış koda erişmenizi sağlar.
Modül Kodlarına Ekleme
Başka bir senaryoda kullanılabilen modül modülü, modül tabelasının adını, bir noktanın ardından, ve modülün içeriğini, modülün içeriğini, modülün içeriğini, gibi TestModule.myVariable . Kullanırken dot operatörü kullanır, diğer scriptlerin bu kodu her modülü yeniden çağırırken erişebilmesi için
local TestModule = {}
-- TestModül'e bir değer ekler
TestModule.myVariable = 100
-- TestModül'e bir işlev ekler
function TestModule.doTask(player)
-- Yer tutucu kodu
end
return TestModule
Modül Kodlarındaki Kapsama
Dış bir senaryoda kullanılacak bir modül fonksiyonu veya değişken için, yazmayın local .
Değişkenlerin ve işlevlerin önünde local yazmak, onların sadece bu script tarafından kullanılabilir olduğu anlamına gelir. Bu, hata ve sorun giderme için çoğu yazılım için iyi bir uygulamadır, ancak modül kaynak kodu işlevleri ve değişkenleri yerel olarak yapamazsınız.
Herhangi bir kod kullanılan yalnızca bu modül kodu hala local içermelidir. durum, aşağıdaki kod, yalnızca modül kodu kullanır difficultyModifier, bu sadece modül kodu kullanılabilir ve modül dışındaki kodlar için işlevi 1> GCoinReward()
local RewardManager = {}
-- Sadece modül kayıtlarında kullanılabilir
local rewardCoins = 50
-- Sadece modül kayıtlarında kullanılabilir
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Diğer yazılımlarda kullanılabilir
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Diğer Skriptlerde Modül Kullanımı
Özellikle, bir modül kodu çalıştırmaz - anahtar kelimeyi kullanarak başka bir scriptte yükleneceği gerekir. Fonksiyon require() 1 argüman alır, modül kodunun Explorer'da yerini kabul eder.
Bir modülü kullanmak için, ayrı bir skripte, require(moduleScript) ile eşdeğer bir değişken ayarlayın.
local MyModule = require(ServerStorage.ModuleScript)
Şimdi, MyModule de bu modül skriptinde oluşturulan modül tablosunu içerir. Bu modül skriptindeki işlevleri ve değişkenleri kullanmak için, modül ismini, bir noktanın ardından ve açık ismini yazın ve MyModule.myFunction() gibi hızlı bir modül scripti içinde kullanılacak ö
local MyModule = require(ServerStorage.ModuleScript)MyModule.myFunction()
Ödül Yönetici Örneği
ModülScript - Ödül Yöneticisi
local RewardManager = {}
-- Sadece modül kayıtlarında kullanılabilir
local rewardCoins = 50
-- Sadece modül kayıtlarında kullanılabilir
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Diğer yazılımlarda kullanılabilir
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Kayıt - Hazine Sandığı Kodu
local ServerStorage = game:GetService("ServerStorage")-- Modül kayıtı yüklelocal RewardManager = require(ServerStorage.RewardManager)--Modül kayıtlarından işlev çağrısılocal coins = RewardManager.getCoinReward("easy")print("Should award " .. coins .. " coins")
Genel Troubleshooting
Buradaki bazı ipuçları, modül kodlarıyla çalışırken yaygın sorunları ele alır. Modül kodlarının daha fazla nuansı olabilir. Ayrıntılar için Modül Kodları üzerindeki bu daha teknik rehberi göz đönüştürün. Sorun: Aşağıdaki hatalı mesajları alın: "Infinite yield possible" veya "not a valid member".
Yüklendiği modül skriptinin yazımını kontrol edin. require() , modül skriptinin isminin modül tablosundan farklı olabileceğinden ismi içermelidir. Sorun: "attempt to index global" .
Modül kodu kullanan herhangi bir kodda, require() işlevini kullanarak yüklendiğinden emin olun. Aksi takdirde, bu kod modül kodundan işlevler ve değişkenler kullanamayacaktır.
Özet
Roblox'daki modül kodları modül kodları, Roblox'un kodu organize etmek ve tekrar kullanmak için kullandığı bir yöntemdir. Bir modül kodu genellikle ServerStorage'da (ya da ReplicatedStorage'da) saklanır. Buradan, diğer kodlar aracılığıyla kodlanmış işlevleri ve değişkenleri çağırabilirler.
durum, bir oyun oyunculara nesneleri toplamak için puan verebilir. Bir modül kaynağı işleyen kodu ele alabilir. Sonra, farklı türdeki kaynaklar için kod vermeyi işleyen bir modül kaynağını işleyebilir. Bu, kodu arasındaki gereksiz yeniden kullanma gereksinimini azaltır, kodu anlaşılır ve korunabilir hale getirir.