Gdy projekty stają się złożone, staje się ważne, jak skrypcity są zorganizowane. Dobrych praktyk organizacyjnych można upewnić się, że kod nie jest duplikowany między skryptami lub staje się trudny do zarządzać.
Lepszym sposobem na zorganizowanie i ponowne wykorzystanie kodu jest używanie skryptów modułowych , unikalnego typu skryptu, który przechowuje zestaw funkcji i zmienne zaprojektowanych na spełnienie celu wspólnego, takiego jak zarządzanie pieniędzmi gracza lub wrogami. Kod w skryptach modułowych może być używany przez inne skrypty. W ten sposób możesz weзваć tę
Przechowywanie często używanych kodów w skryptach modułowych ułatwia utrzymanie i zorganizowanie kodu, ponieważ zmiany dotyczą tylko jednego modułowego skryptu, a nie aktualizację wielu skryptów.
Podstawy wdrożenia modułu
Skrypt modułowe są właściwie ich własnym osobnym obiektem w porównaniu z obiektami skryptu. W Roblox skrypt modułowe można oznaczyć fioletowym ikona.
Tworzenie modułowego skryptu
ModuleScripts są powszechnie umieszczane w ServerScriptService gdy są używane przez skrypcty stron serwera i ReplicatedStorage gdy są używane przez lokalne skrypcty klientów (takie jak interakcje GUI).
- Utwórz ModuleScript w ServerStorage.
구조 modułowych skryptów
Podczas tworzenia każdy modułowy skrypt zaczyna się od kodu poniżej:
local Module = {}return Module
Linia local Module = {} tworzy tabelę lub kontener kodu, w którym funkcje i zmienne modułu mogą być przechowywane. Ta tabela powinna być zmieniona na celu modułu, tak jak RewardManager lub ParticleController. W przeciwieństwie do innych
local RewardManager = {}return RewardManager
Tak, inne skrypty mogą używać nielokalnych funkcji lub zmienne modułu, każdy moduł kończy się z powrotem MyModule . Każdy inny skrypt, który próbuje uzyskać kod z modułu, powrót pozwala ten skrypt uzyskać dostęp do kodu zapisu w tabeli modułu.
Dodawanie do modułowych skryptów
Aby dodać funkcję lub zmienne do modułu, który może być używany w innym skrypcie, wpisz nazwę modułu i następnie kropkę, a następnie nazwę funkcji lub zmienne, jak w TestModule.myVariable. Używając operatora kropki jest innym sposobem na dodanie kodu do tabeli, umożliwiając innym skryptom dostęp do tego kodu, gdy modułowa tabela jest zwracana.
local TestModule = {}
-- Dodaje zmiennej do tabeli "TestModule"
TestModule.myVariable = 100
-- Dodaje funkcję do tabeli 'TestModule'
function TestModule.doTask(player)
-- kodplaceholder
end
return TestModule
Zakres w modułach skryptów
Dla funkcji modułu lub zmiennej do użycia w zewnętrznym skrypcie, nie wpisujesz local .
Wpisywanie local przed zmienne i funkcje oznacza, że są one tylko dostępne dla tego skryptu. Chociaż jest to dobra praktyka dla większości skryptów do zmniejszania błędów i rozwiązywania problemów, nie możesz uczynić lokalnych funkcji skryptów i zmienne.
Każdy używany kod tylko przez ten moduł skryptu powinien nadal zawierać local . Na instancjakod poniżej zawiera lokalną zmienne difficultyModifier, która może być używana tylko w tym module script, i funkcję 1> GCoinReward()1>, która może być używana w skryptach poza module.
local RewardManager = {}
-- Używany tylko w skrypcie modułu
local rewardCoins = 50
-- Używany tylko w skrypcie modułu
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Można używać w innych skryptach
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Używanie modułów w innych skryptach
Sama w sobie, skrypt modułu nie może wykonać kodu — musi być załadowany w innym skrypcie używającym słowa kluczowego require(). Funkcja require() akceptuje jeden argument, lokalizację modułu skryptu w Explorer.
Aby użyć modułu, w osobnym skrypcie ustaw zmienną równą require(moduleScript) .
local MyModule = require(ServerStorage.ModuleScript)
Teraz zmienne MyModule zawiera tabelę modułu stworzoną w tym module script. Aby użyć funkcji i zmienne z tej tabeli, wpisz nazwę zmienne, następnie punkt i dokładną nazwę tego module script, jak MyModule.myFunction() . Gdy skrypt będzie się uruchomić i dotrze do tej linii, będzie on uzyskiwał dostęp do tej specyficznej fun
local MyModule = require(ServerStorage.ModuleScript)MyModule.myFunction()
RewardManager przykład
ModuleScript - Menedżer Nagród
local RewardManager = {}
-- Używany tylko w skrypcie modułu
local rewardCoins = 50
-- Używany tylko w skrypcie modułu
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Można używać w innych skryptach
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Skrypt - TreasureChestScript
local ServerStorage = game:GetService("ServerStorage")-- Załaduj modułowy skryptlocal RewardManager = require(ServerStorage.RewardManager)--Wezwanie funkcji z modułu skryptulocal coins = RewardManager.getCoinReward("easy")print("Should award " .. coins .. " coins")
Generał Troubleshooting
Niektóre z wskazówek tutaj dotyczą problemów powszechnych podczas pracy z modułowymi skryptami. Pamiętaj, że modułowe skrypty mogą być skomplikowanym tematem z większą ilością nuansów. Dla więcej szczegółów, zobacz ten bardziej techniczny przewodnik na temat Module Scripts . Problem: Otrzymaj wiadomość błędu zawierającą: "Infinite yield possible" lub «nie avaliaj członek.
Sprawdź poprawność wszystkich znaków w module script, gdzie jest ona ładowana. require() musi zawierać dokładną ścieżkę i wszystkie znaki modułu, które mogą być nazwane inaczej niż tabela modułu. Problem: Otrzymaj wiadomość błędu zawierającą: "attempt to index global" .
W dowolnych skryptach używających modułowego skryptu, upewnij się, że zostanie on załadowany za pomocą funkcji require(). Jeśli nie, ten skrypt nie może używać funkcji i zmienne z modułu skryptu.
Podsumowanie
Skripty modułu w Roblox są metodą, którą kodenci używają, aby zorganizować i ponownie użyć kodu. Skrypt modułu jest często przechowywany w ServerStorage (lub ReplicatedStorage dla interakcji bazowych). Od tamtych, inne skrypty mogą wywołać funkcje i zmienne przechowywane w tym modułowym skrypcie.
Na instancjajedna gra może przyznać punkty graczom za zbieranie obiektów. Modułowy skrypt może obsługiwać kod, aby dać punkty. Następnie, skrypty dla różnych rodzajów obiektów mogą po prostu wezwywać funkcję modułu. To zmniejsza potrzebę ponownego używania kodu między skryptami, co ułatwia zrozumienie i utrzymanie kodu.