Po utworzeniu mapy nadszedł czas, aby rozpocząć budowę skryptów.Pozostała część tego kursu będzie mocno skupiona na skryptowaniu wszystkich różnych elementów pętli gry.
Ustaw skrypty
Bitwa royale wykorzysta kombinację skryptów modułowych i zwykłych skryptów. Poniżej są skrypty i ich funkcje.
Menadżer gry | Skrypt. Wykonuje funkcje z menedżera meczów za pomocą zmiennych z ustawień gry |
Menadżer meczów | Skrypt modułu. Wykonuje funkcje, takie jak wysyłanie graczy na arenę lub śledzenie czasu w dopasowywać. |
Ustawienia gry | Skrypt modułu. Przechowuje powszechnie używane zmienne używane przez inne skrypty. |
Skrypt ustawień gry
Stwórz skrypt modułu o nazwie GameSettings, aby przechować zmienne używane przez inne skrypty, takie jak czas meczu i przerwy.Te zmienne zostaną wykorzystane przez skrypt GameManager później.
W ServerStorage , utwórz katalog o nazwie ModuleScripts. W tym katalogu utwórz nowy skrypt modułu o nazwie GameSettings.
Otwórz ustawienia gry i zmień nazwę tabeli modułu, aby pasowała do nazwy skryptu.
local GameSettings = {}return GameSettingsW tabeli modułu dodaj zmienne do następującego użytku. Zrób najlepszą szacunkową dla każdej wartości, możesz ją zawsze zmienić później, gdy testujesz.
- Czas przerwy - sekundy gracze czekają przed dopasowywać.
- Czas trwania meczu - Długość meczu w sekundach.
- Minimalna liczba graczy - Najmniejsza liczba graczy potrzebna do rozpoczynać.
- Czas przejścia - Czas przed i po meczu w sekundach. Ułatwia przejście między częściami pętli gry mniej gwałtownie.
local GameSettings = {}-- Zmienne gryGameSettings.intermissionDuration = 5GameSettings.matchDuration = 10GameSettings.minimumPlayers = 2GameSettings.transitionTime = 5return GameSettings
Skrypt Menadżera meczów
Drugi skrypt połączony z GameManagerem to MatchManager.Ten skrypt zarządza zadaniami, takimi jak uruchomienie timera lub zresetowanie graczy po zakończeniu meczu.
W ramach MatchManager istnieje funkcja o nazwie prepareGame(), która rozpoczyna grę, przenosząc graczy do dopasowywać.
W ServerStorage > ModuleScripts > dodaj skrypt modułu o nazwie MatchManager. Zmień nazwę tabeli modułu.
local MatchManager = {}return MatchManagerDodaj nową funkcję modułu do MatchManager o nazwie prepareGame(). Włącz oświadczenie o drukowaniu, aby później przetestować skrypt.
local MatchManager = {}function MatchManager.prepareGame()print("Game starting!")endreturn MatchManager
Zakoduj pętlię gry
Główny cykl gry zostanie skodowany w skrypcie GameManager za pomocą zmiennych właśnie utworzonych.Pamiętaj, że w pętlu gry występują trzy fazy: przerwa, konkurencja i oczyszczenie i resetować.
Skrypt Menadżera gry
Ten skrypt jest zwykłym skryptem serwera, więc umieść go w ServerScriptService, a nie w katalogu skryptów modułu.Rzeczywista pętla gry będzie w pętli while true.
W ServerScriptService utwórz nowy skrypt o nazwie GameManager.
Dodaj zmienną dla usługi "ServerStorage", która jest miejscem, w którym znajdują się Modulescripty.Następnie dodaj zmienną dla usługi "Gracze", która będzie potrzebna do sprawdzenia liczby graczy podczas przerw.
-- Usługilocal ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")Aby użyć wcześniej utworzonych modułów:
- Ustaw zmienną o nazwie moduleScripts na lokalizację katalogu ModuleScripts.
- Dodaj zmienne o nazwie matchManager i gameSettings. Ustaw każdą zmienną na wymaganie odpowiedniego skryptu.
-- Usługilocal ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")-- Skrypty modułowelocal moduleScripts = ServerStorage:WaitForChild("ModuleScripts")local matchManager = require(moduleScripts:WaitForChild("MatchManager"))local gameSettings = require(moduleScripts:WaitForChild("GameSettings"))Po zmiennych dodaj pętli while true do. Wszystkie fazy pętli gry zostaną w niej włączone, aby się powtarzały bez końca.
-- Skrypty modułowelocal moduleScripts = ServerStorage:WaitForChild("ModuleScripts")local matchManager = require(moduleScripts:WaitForChild("MatchManager"))local gameSettings = require(moduleScripts:WaitForChild("GameSettings"))-- Główny cykl grywhile true doend
Zakoduj przerwę
Choć pętla gry biegnie bez końca, przerwa powinna wstrzymać pętlę i kontynuować tylko wtedy, gdy jest wystarczająca liczba graczy na dopasowywać.Aby zrealizować tę przerwę, dodaj gniazdzony cykl powtórzenia dla przerwy w pędzie while.Ta zamknięta pętla powtórzy się, dopóki nie pojawi się wystarczająca liczba graczy, przerwując główną pętlę.Gdy pojawi się wystarczająca liczba graczy, wyjdzie i przeniesie graczy do dopasowywać.
Z powtórzeniem pętli , kod w pętli zostanie wykonany co najmniej raz.W przeciwieństwie do pętli while nie sprawdza ona swojego warunku, dopóki pętla się nie zakończy.Zapewnia to, że gracze zawsze idą do lobby przed dopasowywać.
W pętli while true do wpisz repeat i naciśnij Enter, aby wypełnić automatycznie za pomocą kluczowa until.
while true dorepeatuntilendSprawdź, czy aktualna liczba graczy (#Players:GetPlayers()) jest większa lub równa zmiennej minimumPlayers utworzonej wcześniej w module GameSettings.
while true dorepeatuntil #Players:GetPlayers() >= gameSettings.minimumPlayersendW pętlu powtórzenia dodaj oświadczenie drukujące mówiące, że przerwa się rozpoczyna.Użyj task.wait(), aby zatrzymać się na przerwę za pomocą intermissionDuration z GameSettings.
while true dorepeatprint("Starting intermission")task.wait(gameSettings.intermissionDuration)until #Players:GetPlayers() >= gameSettings.minimumPlayersendPrzetestuj i sprawdź, czy oświadczenie drukowane "Starting intermission" jest wyświetlane co najmniej dwa razy.Widząc wiadomość dwa razy dowodzi, że pętla powtórzenia nie znalazła wystarczającej liczby graczy i uruchomiła się ponownie.Będziesz musiał poczekać na czas przerwy, zanim zobaczysz wiadomość po raz drugi.
Wskazówki dotyczące rozwiązywania problemów
W tym momencie, jeśli nie pojawiasz się zamiarem, spróbuj jednej z poniższych opcji.
- task.wait() powinno znajdować się wewnątrz pętli powtórzenia.Bez oczekiwania skrypt będzie uruchamiany zbyt wiele razy w sekundzie, przeciążając Roblox Studio i powodując błąd.
- W module Ustawień gry zmienna intermissionDuration powinna być większa niż 1. Jeśli jest niższa, skrypt może powtarzać się zbyt często, powodując problemy z opóźnieniem.
Zakończ przerwę
Gdy pojawi się wystarczająca liczba graczy, poczekaj na krótki czas przejścia.Następnie wysyłaj je do meczu, wywołując funkcję prepareGame() w MatchManager.Pamiętaj, że funkcja po prostu drukuje linię, ale dodasz więcej kodu później.
Na końcu pętla powtórzenia dodaj oświadczenie o drukowaniu mówiące, że przerwa się skończyła, aby przetestować swój kod.Następnie podążaj za nim za pomocą zmiennej task.wait() używającą wartości GameSetting's transitionTime.
while true dorepeatprint("Starting intermission")task.wait(gameSettings.intermissionDuration)until #Players:GetPlayers() >= gameSettings.minimumPlayersprint("Intermission over")task.wait(gameSettings.transitionTime)endPo oczekiwaniu wezwij prepareGame() z modułu MatchManager.Gdy kod zostanie wykonany, wyświetli on tylko tekst w oknie wyjściowym.Poczekaj do następnej sekcji, aby przetestować ten kod.
while true dorepeatprint("Starting intermission")task.wait(gameSettings.intermissionDuration)until #Players:GetPlayers() >= gameSettings.minimumPlayersprint("Intermission over")task.wait(gameSettings.transitionTime)matchManager.prepareGame()end
Testuj gry wieloosobowe
Aby kod został wykonany teraz prepareGame(), musi wyjść z pętli powtórzenia.Ale, aby to zrobić, musi istnieć więcej niż jeden gracz.Oznacza to, że jeśli użyjesz przycisku playtest, funkcja nigdy nie zostanie uruchomiona, ponieważ jesteś jedynym graczem w grze (chyba że twoja minimalna liczba graczy wynosi jeden).Aby to przetestować, musisz symulować grę wieloosobową.
Uruchom lokalny serwer
Aby przetestować kod wymagający więcej niż jednego gracza, utwórz lokalny serwer.Chociaż opublikowane gry są zwykle na serwerach Roblox, lokalny serwer symuluje grę wieloosobową na komputerze z symulowanymi graczami.
Aby uruchomić lokalny serwer, w zakładce Test > Klienty i serwery > ustaw sekcję odtwarzania gracza na liczbę graczy w zmiennej minimumPlayers w GameSetting's.Ta lekcja używa 2 graczy.
Kliknij Rozpocznij, aby rozpocząć serwer.
Poczekaj kilka sekund, aż serwer się skonfiguruje.Wiele okien zostanie otwartych w dodatku do oryginalnego okna Studio.Możliwe, że będziesz musiał zezwolić na dostęp do Roblox Studio z ognistych ścian lub innego oprogramowania bezpieczeństwa online.
Wskazówki dotyczące rozwiązywania problemów
W tym momencie nie możesz zobaczyć serwerów testowych, spróbuj jednego z poniższych.
- Jeśli masz jakiekolwiek problemy z rozpoczęciem serwera, sprawdź ponownie artykuł Problemy z ogniskiem i routerem.
- Ustaw liczbę graczy do niewielkiej kwoty, takiej jak 2 lub 3.
- Jeśli problem nie zostanie rozwiązany, spróbuj ponownego uruchomienia Studio lub ponownego uruchomienia komputera.
Test na lokalnym serwerze
Zobaczysz wiele okien, gdy serwer zostanie uruchomiony. Każde z nich reprezentuje inną część relacji serwer/klient.
- Serwer (zielone tło) uruchamia gra.
- Klient (niebieskie ramki) symuluje doświadczenie gracza.


Gdy serwer jest włączony, możesz sprawdzić, czy kod działa.
Znajdź okno Serwer z zielonym obrysem.Sprawdź oświadczenie drukowane wezwane z skryptu MatchManager.Ponieważ istnieje pętla powtórzenia, zobaczysz te same oświadczenia drukujące się powtarzające.
Gdy skończysz testować, w dowolnym oknie, zamknij serwer przy pomocy przycisku Czyszczenie.To zamyka wszystkie okna serwera i klienta i przenosi cię z powrotem do twojego normalnego okna Studio.
Wskazówki dotyczące rozwiązywania problemów
W tym momencie, jeśli nie pojawiły się zamierzone oświadczenia drukowane, spróbuj jednej z poniższych opcji.
- Sprawdź, czy funkcje takie jak prepareGame() są w zakresie pętla while true.
- Jeśli wydruk z MatchManager nie działa, sprawdź kilka popularnych rozwiązań problemów z kodami modułowymi, takich jak upewnienie się, że skrypt MatchManager jest wymagany w GameManager lub że prepareGame() jest dodany do tabeli modułu.
Zakończone skrypty
Poniżej są ukończone skrypty do sprawdzenia podwójnego swojej pracy.
Skrypt Menadżera gry
-- Usługilocal ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")-- Skrypty modułowelocal moduleScripts = ServerStorage:WaitForChild("ModuleScripts")local matchManager = require(moduleScripts:WaitForChild("MatchManager"))local gameSettings = require(moduleScripts:WaitForChild("GameSettings"))-- Główny cykl grywhile true dorepeatprint("Starting intermission")task.wait(gameSettings.intermissionDuration)until #Players:GetPlayers() >= gameSettings.minimumPlayersprint("Intermission over")task.wait(gameSettings.transitionTime)matchManager.prepareGame()end
Skrypt Menadżera meczów
local MatchManager = {}
function MatchManager.prepareGame()
print("Game starting!")
end
return MatchManager
Skrypt ustawień gry
local GameSettings = {}-- Zmienne gryGameSettings.intermissionDuration = 5GameSettings.roundDuration = 10GameSettings.minimumPlayers = 2GameSettings.transitionTime = 5return GameSettings