Struktury sterujące mogą mieć więcej niż jeden warunek. Słowa kluczowe else i elseif mogą tworzyć dodatkowe scenariusze na to, co powinno się zdarzyć pod wieloma warunkami. Składnia wygląda następująco:
Pokazuje składnię dla elseif i elseif isGreen thenprint("Idź")elseif isYellow thenprint("Zwolnij")elseif isPedestrians thenprint("Czekaj")elseprint("stop")end
W tym projekcie else i elseif są używane do kodowania toru parkour, gdzie biegacze otrzymują nagrody w zależności od swojego czasu ukończenia.

Kodowanie wielu warunków
Do tego projektu mogłbyś napisać unikalne wyrażenie if dla każdej medalu do przyznania graczom, ale zajmuje to dużo czasu. Weź pod uwagę przykład poniższego, wymyślonego kodu.
Wszystkie instrukcje ifif finishTime < 5 then-- Zdobądź złoty medalendif finishTime >= 5 and <= 10 then-- Zdobądź srebrny medalendif finishTime > 10 and <= 15 then-- Zdobądź brązowy medalend
Bardziej czytelny i wydajny sposób zakodowania tego jest użycie jednego wyrażenia if i słowa kluczowego elseif, aby zapewnić alternatywne warunki do sprawdzenia, jeśli poprzednie warunki nie są prawdziwe.
Używa elseif i elseif finishTime < 5 then-- Zdobądź złoty medalelseif finishTime >= 5 and <= 10 then-- Zdobądź srebrny medalelseif finishTime > 10 and <= 15 then-- Zdobądź brązowy medalend
Kiedy instrukcja if/then jest uruchamiana, zaczyna od góry i uruchamia kod tylko dla pierwszego prawdziwego warunku, który znajdzie.
Ustawienie toru wyścigowego
Zacznij od umiejscowienia punktu startowego toru i linii mety, a następnie stwórz skrypt, aby zmierzyć czas gracza i przyznać różne medale.
Stwórz zakotwiczony element o nazwie FinishLine. Aby przyspieszyć testowanie, umieść początek i koniec blisko siebie. Możesz przesunąć linię mety po zakończeniu skryptu.

Część mety 
Cały tor W FinishLine wstaw skrypt o nazwie RaceManager. Następnie dodaj jedną zmienną do przechowywania, ile sekund minęło od rozpoczęcia wyścigu, oraz drugą zmienną do odniesienia do FinishLine.
local finishLine = script.Parentlocal timePassed = 0Stwórz funkcję o nazwie finish().
local timePassed = 0local finishLine = script.Parentlocal function finish()endNa własną rękę:
- Zaimplementuj funkcję o nazwie partTouched(), która uruchamia finish(), gdy gracz ją dotknie.
- Połącz linię mety z partTouched().
- Porównaj swój kod z poniższym przykładem.
local function finish()print("dotknięto linii mety")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)Przeprowadź test i sprawdź, czy finish() jest wywoływane, gdy dotkniesz linii mety.
Zapobiegaj powtarzaniu finish()
Obecnie, gdy gracz dotyka linię mety, finish() jest ciągle wywoływane, tak długo jak gracz dotyka tej części.
Użyj zmiennej logicznej, zmiennej, która przechowuje prawdę lub fałsz, aby upewnić się, że finish() jest wywoływane tylko raz.
Stwórz nową zmienną o nazwie raceActive i ustaw ją na true.
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- Uruchamia się, gdy gracz dotknie części linii metylocal function finish()Dodaj drugi warunek do instrukcji if, aby sprawdzić, czy raceActive jest prawdziwe przed wywołaniem finish().
local function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endendAby zapobiec ponownemu wywołaniu finish(), ustaw raceActive na false.
local function finish()print("dotknięto linii mety")raceActive = falseendPrzeprowadź test swojego doświadczenia, aby sprawdzić, że widzisz swoją instrukcję print tylko raz.
Mierz czas
Podobnie jak instrukcja if, pętla while może również używać warunku, aby sprawdzić, czy powinna działać. Aby zmierzyć czas gracza, stwórz licznik za pomocą pętli while true do, która działa tylko wtedy, gdy zmienna logiczna raceActive jest prawdziwa.
Na dole skryptu wpisz while raceActive == true do. Naciśnij Enter, aby automatycznie uzupełnić i dodać end.
finishLine.Touched:Connect(partTouched)while raceActive == true doendAby zmierzyć czas graczy, w pętli dodaj 1 do zmiennej timePassed raz na sekundę. Dołącz instrukcję print, aby przetestować swoją pracę.
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)endPrzeprowadź test doświadczenia i sprawdź, czy widzisz każdą sekundę wyświetlaną w oknie Output.
Przyznaj medale graczom
Aby zakończyć, użyj instrukcji if z wieloma warunkami, aby przyznać graczom różne medale nagrody w zależności od ich wyników. Użyj instrukcji if oraz dwóch instrukcji elseif, aby sprawdzić czas ukończenia gracza i przyznać im odpowiedni medal.
Aby potwierdzić, że każdy medal można przyznać, użyj instrukcji print.
local function finish()raceActive = falseprint("Ukończyłeś w " .. timePassed)endAby przyznać złoty medal, napisz instrukcję if, która porównuje timePassed do pożądanego czasu ukończenia. Ten przykład sprawdza, czy czas gracza był mniejszy lub równy 10 sekund.
local function finish()raceActive = falseprint("Ukończyłeś w " .. timePassed)if timePassed <= 10 thenprint("Otrzymujesz złoty medal!")endendPrzeprowadź test i potwierdź, że złoty medal można przyznać.
Dodaj dodatkowe warunki
Teraz, gdy przetestowałeś złoty medal, zakoduj warunki dla pozostałych medali używając słowa kluczowego elseif.
Dla srebrnego medalu użyj elseif i następnego pożądanego zakresu czasowego. W tym przykładzie, zakres to więcej niż 10 sekund, ale mniej niż lub równy 20 sekund.
local function finish()raceActive = falseprint("Ukończyłeś w " .. timePassed)if timePassed <= 10 thenprint("Otrzymujesz złoty medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("Otrzymujesz srebrny medal!")endendUżyj tego samego schematu dla brązowego medalu. Sprawdź swój kod z poniższym przykładem.
local function finish()raceActive = falseprint("Ukończyłeś w " .. timePassed)if timePassed <= 10 thenprint("Otrzymujesz złoty medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("Otrzymujesz srebrny medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("Otrzymujesz brązowy medal!")endendPrzeprowadź test dla srebrnych i brązowych medali.
Wskazówki dotyczące rozwiązywania problemów
Jeśli nie widzisz srebrnych i brązowych medali, spróbuj jednej z poniższych wskazówek.
- Każdy elseif powinien mieć then po swoim warunku.
- W partTouched(), upewnij się, że drugi warunek instrukcji if używa ==, jak w raceActive == true.
- Sprawdź, czy każdy elseif jest w zasięgu. Każdy warunek elseif musi być między pierwszą linijką instrukcji if/then a ostatnim end.
Dodaj warunek else
Jeśli gracz nie zdobył żadnego medalu, powinno się go zachęcić do spróbowania ponownie. W tym przypadku możesz użyć instrukcji else, która uruchamia się, jeśli żadne inne warunki nie są prawdziwe, aby pokazać im wiadomość.
Poniżej ostatniego elseif i nad end, rozpocznij nową linię i wpisz else. Nie dodawaj then. Pod else użyj instrukcji print, aby zachęcić ich do spróbowania ponownie.
local function finish()raceActive = falseprint("Ukończyłeś w " .. timePassed)if timePassed <= 10 thenprint("Otrzymujesz złoty medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("Otrzymujesz srebrny medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("Otrzymujesz brązowy medal!")elseprint("Spróbuj ponownie!")endend
2 . Przeprowadź test, aby zobaczyć wiadomość else.
Podsumowanie
Struktury sterujące mogą mieć więcej niż jeden scenariusz. Użyj instrukcji if, aby ustawić początkowe oświadczenie do sprawdzenia, a następnie dodaj tyle elseif warunków, ile to konieczne. Na koniec użyj else, aby określić, co powinno się zdarzyć, jeśli wszystkie podane warunki są fałszywe.
Zaczynając od góry, wszystkie warunki będą sprawdzane, a tylko pierwszy prawdziwy warunek uruchomi kod. Pozostałe warunki nie będą sprawdzane, ani ich kod nie uruchomi się.
Po zakończeniu projektu możesz rozwinąć skrypt, aby dodać nowe elementy na kilka dodatkowych sposobów.
- Dodaj kod, aby gracze mogli powtórzyć wyścig, dotykając linii startowej po ukończeniu.
- Zrób sposób na wyświetlenie czasu podczas wyścigu. Możesz wyświetlić czas na elemencie, używając Surface GUI, jak w Utwórz zdobytą Mostek tutorial.
Zakończony skrypt
local timePassed = 0
local finishLine = script.Parent
-- Używane do zapobiegania powtarzaniu finish() i timera po zakończeniu wyścigu
local raceActive = true
-- Uruchamia się, gdy gracz dotknie linii mety i pokazuje mu nagrodę
local function finish()
raceActive = false
print("Ukończyłeś w " .. timePassed)
if timePassed <= 10 then
print("Otrzymujesz złoty medal!")
elseif timePassed > 10 and timePassed <= 20 then
print("Otrzymujesz srebrny medal!")
elseif timePassed > 20 and timePassed <= 30 then
print("Otrzymujesz brązowy medal!")
else
print("Spróbuj ponownie!")
end
end
-- Sprawdza, czy gracz dotyka części, gdy wyścig jest aktywny
local function partTouched(otherPart)
local character = otherPart.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid and raceActive == true then
finish()
end
end
finishLine.Touched:Connect(partTouched)
-- Śledzi czas wyścigu, gdy wyścig jest aktywny. Musi być na dole skryptu.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end