Struktury kontroli mogą mieć więcej niż jedno warunek.Słowa kluczowe else i elseif mogą tworzyć dodatkowe scenariusze tego, co powinno się wydarzyć przy kilku warunkach.Syntax wygląda jak:
Pokazuje sytuację dla elseif i else
if isGreen thenprint("Go")elseif isYellow thenprint("Slow")elseif isPedestrians thenprint("Wait")elseprint("stop")end
W tym projekcie else i elseif są używane do kodowania kursu parkour, na którym biegacze otrzymują nagrody w zależności od czasu końcowego.

Koduj wiele warunków
Dla tego projektu możesz napisać unikalne oświadczenie dla każdej medali, aby nagrodzić graczy, ale to zajmuje dużo czasu.Weźmy na instancjakod wyobrażony poniżej.
Wszystkie oświadczenia if
if 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 na kodowanie tego jest użycie jednego oświadczenia if i użycie kluczowa elseif słowo, aby zapewnić alternatywne warunki testowania, jeśli poprzednie warunki nie są prawdą.
Używa elseif i else
if 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 zostanie uruchomione oświadczenie if/then, zacznie się na górze i uruchomi tylko kod dla pierwszej prawdziwej warunku, jaką znajdzie.
Ustaw kurs wyścigowy
Zacznij od umieszczenia punktu startu i linii mety kursu, a następnie stwórz skrypt, aby z czasem zliczyć gracza i przyznać różne medale.
Stwórz osadzoną część o nazwie FinishLine.Aby przyspieszyć testowanie, umieść początek i koniec blisko siebie.Możesz przenieść linię mety po zakończeniu skryptu.
Zakończ część >Cały kurs >W linii końcowej wstawь skrypt o nazwie RaceManager.Następnie dodaj jedną zmienną, aby przechować, ile sekund minęło od rozpoczęcia wyścigu, i drugą zmienną, aby odwołać się do FinishLine.
local finishLine = script.Parentlocal timePassed = 0Stwórz funkcję o nazwie finish().
local timePassed = 0local finishLine = script.Parentlocal function finish()endNa własną posiadać:
- Zapisz funkcję o nazwie partTouched(), która uruchamia się finish(), gdy gracz ją dotknie.
- Podłącz część linii mety do partTouched().
- Porównaj swój kod z poniższym przykładem.
local function finish()print("touched the finish line")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)Przetestuj i sprawdź, czy finish() jest wzywany, gdy dotkniesz linii mety.
Unikaj powtarzania finish()
W tej chwili, za każdym razem, gdy gracz dotknie linii mety, finish() jest nieprzerwanie wzywany tak długo, jak gracz dotyka części.
Użyj łącznika , zmiennej, która przechowuje prawdę lub fałsz, aby upewnić się, że finish() jest wywoływany tylko raz.
Utwórz nową zmienną o nazwie raceActive i ustaw ją na true.
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- Uruchamia się za każdym razem, gdy gracz dotyka części linii metylocal function finish()Dodaj drugie warunki do oświadczenia if, aby sprawdzić, czy raceActive jest prawdą, zanim wezwiesz finish().
local function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endendAby zapobiec ponownemu wezwaniu finish(), ustaw raceActive na false.
local function finish()print("touched the finish line")raceActive = falseendPrzetestuj swoją grę, aby sprawdzić, że widzisz tylko jedno oświadczenie wydruku testowego.
Śledź czas
Podobnie jak w przypadku oświadczenia if, pętla while może również używać warunku, aby sprawdzić, czy powinna się uruchomić.Aby zsynchronizować gracza, utwórz zegar za pomocą pętla while true, która biegnie tylko wtedy, gdy zmienna raceActive jest prawda.
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 zsynchronizować graczy, w pętli, dodaj 1 do zmiennej timePassed raz na sekundę. Włącz oświadczenie drukujące, aby przetestować swoją pracę.
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)endZagraj w grę i sprawdź, czy widzisz każdą sekundę wyświetlaną w oknie wyjściowym.
Nagrodzone medale graczy
Aby zakończyć, użyj oświadczenia if z wieloma warunkami, aby przyznać graczom inną medal za wyniki w oparciu o ich osiągnięcia.Użyj oświadczenia if i dwóch oświadczeń elseif, aby sprawdzić czas końcowy gracza i przyznać mu poprawny medal.
Aby potwierdzić, że każda medala może zostać przyznana, użyj oświadczeń drukowanych.
local function finish()raceActive = falseprint("You finished in " .. timePassed)endAby przyznać złoty medal, skoduj oświadczenie if, które porównuje timePassed do pożądanego czasu końcowego.Ten przykład sprawdza, czy czas gracza był mniejszy niż lub równy 10 sekundom.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")endendPrzetestuj i potwierdź, że można przyznać złoty medal.
Dodaj dodatkowe warunki
Teraz, gdy przetestowałeś warunki złotego medalu, warunki kodu dla pozostałych medali za pomocą kluczowa elseif >.
Dla srebrnego medalu użyj elseif i następnego zakresu czasowego, który jest następny.W tym przykładzie zakres wynosi więcej niż 10 sekund, ale mniej niż lub równy 20 sekundom.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")endendUżyj tego samego wzoru dla brązowego medalu. Sprawdź swój kod za pomocą przykładu poniżej.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("You get a bronze medal!")endendTestuj dla srebrnych i brązowych medali.
Wskazówki dotyczące rozwiązywania problemów
Jeśli nie widzisz pojawiających się srebrnych i brązowych metali, spróbuj jednego z poniższych.
- Każdy elseif powinien mieć potem po swoim warunku.
- W partTouched() upewnij się, że drugi warunek oświadczenia if używa == , tak jak w raceActive == true .
- Sprawdź, czy każdy elseif jest w zakresie. Każda elseif warunek musi być między pierwszą linią oświadczenia if/then a jego ostatnią end.
Dodaj warunek else
Jeśli gracz nie zdobył żadnego z medali, powinieneś zachęcić go do spróbowania ponownie.W tym przypadku możesz użyć oświadczenia else, które uruchamia się, gdy żadne inne warunki nie są prawdziwe, aby pokazać im wiadomość.
Poniżej ostatniej elseif i powyżej end, rozpocznij nową linię i wpisz else. Nie dodawaj więc potem.Poniżej wszystkiego użyj oświadczenia druku, aby poprosić ich o ponowne spróbowanie.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("You get a bronze medal!")elseprint("Try again!")endend
2. Przetestuj, aby zobaczyć wiadomość else.
Podsumowanie
Struktury kontroli mogą mieć więcej niż jeden scenariusz.Użyj oświadczeń, aby skonfigurować początkowe oświadczenie do sprawdzać, a następnie dodaj tak wiele elseif warunków, jak to konieczne.Wreszcie, użyj else, aby określić, co powinno się wydarzyć, jeśli wszystkie podane warunki są fałszywe.
Zaczynając od góry, wszystkie warunki zostaną sprawdzone, a tylko pierwszy prawdziwy warunek uruchomi kod.Pozostałe warunki nie zostaną sprawdzone, ani ich kod nie zostanie wykonany.
Po zakończeniu projektu możesz rozszerzyć skrypt, aby dodać nowe elementy na kilka dodatkowych sposobów.
- Dodaj kod, aby gracze mogli powtórzyć wyścig, dotykając linii startu po zakończeniu.
- Zaprojektuj sposób wyświetlania czasu podczas wyścigu.Możesz wyświetlać czas na części za pomocą interfejsu GUI powierzchni, tak jak w tworzeniu samouczka mostu czasowego.
Completed script
local timePassed = 0
local finishLine = script.Parent
-- Używany do zapobiegania powtórzeniu się finish() i timera po zakończeniu wyścigu
local raceActive = true
-- Biegnie, gdy gracz dotknie linii mety i pokaże mu nagrodę
local function finish()
raceActive = false
print("You finished in " .. timePassed)
if timePassed <= 10 then
print("You get a gold medal!")
elseif timePassed > 10 and timePassed <= 20 then
print("You get a silver medal!")
elseif timePassed > 20 and timePassed <= 30 then
print("You get a bronze medal!")
else
print("Try again!")
end
end
-- Sprawdza, czy gracz dotknie 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