Struktury kontrolne mogą mieć więcej niż jedną warunki. Keywords else and elseif może stworzyć dodatkowe scenariusze dla tego, co powinno się stać pod kilku warunkami. Syntetyka wygląda jak:
Pokazuje sintaksę dla else i dla innych
if isGreen thenprint("Go")elseif isYellow thenprint("Slow")elseif isPedestrians thenprint("Wait")elseprint("stop")end
W tym projekcie używane są else i elseif, aby kodować kurs parkour, w którym biegacze otrzymują nagrody w zależności od ich czasu końca.
Kodowanie wielu warunków
Dla tego projektu możesz napisać unikalną if dla każdej medali, aby przyznać graczom, ale to zajmuje dużo czasu. Weź, na instancja, wymyślony kod poniżej.
Wszystkie ify
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ązową medalęend
Bardziej czytelny i wydajny sposób na kodowanie tego jest użycie pojedynczego if-句 i użycie słowa kluczowego elseif , aby zapewnić alternatywne warunki do testu, jeśli poprzednie warunki nie są prawdziwe.
Używa else 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ązową medalęend
Gdy stanie się if/then statement, będzie ona zaczynać się od góry i będzie wykonana tylko kod dla pierwszej znalezionej prawdziwej kondycji.
Ustawienie kursu wyścigu
Zacznij od umieszczenia punktu wyjścia kursu i linii mety, a następnie stwórz skrypt, aby ustalić czas gracza i przyznać różne medale.
Utwórz związaną część nazyającą się FinishLine. Aby ułatwić testowanie, umieść początek i koniec końca blisko siebie. Możesz przenieść linię końca po zakończeniu skryptu.
W FinishLine wpisz skrypt o nazwie RaceManager. Następnie dodaj jedną zmienne do przechowywania liczby sekund od momentu rozpoczęcia wyścigu do momentu jego zakończenia, a następnie dodaj jedną zmienne do odniesienia do FinishLine.
local finishLine = script.Parentlocal timePassed = 0Utwórz funkcję o nazwie finish() .
local timePassed = 0local finishLine = script.Parentlocal function finish()endNa posiadać:
- Zapisz funkcję o nazwie partTouched(), która uruchomuje finish(), gdy gracz ją dotyka.
- Połącz część linii końcowej z partTouched() .
- Porównaj swój kod z przykładem poniżej.
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)Zagrajtestuj i sprawdź, że finish() zostanie wywołany, gdy dotkniesz linii mety.
Unikaj powtarzania się
Obecnie, gdy gracz dotyka linii końcowej, finish() jest nieustannie wzywany, aż gracz dotknie części.
Użyj Boolean , zmiennej, która przechowuje prawdę lub fałsz, aby upewnić się, że funkcja finish() jest wywołana tylko raz.
Utwórz nową zmienną nazyającą się raceActive i ustaw ją na true.
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- Biegnie za każdym razem, gdy gracz dotyka części linii metylocal function finish()Dodaj drugie warunki do if, aby sprawdzić, czy raceActive jest prawdziwe przed wezwanie finish() .
local function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endendAby zapobiec finish() ponownemu wezwaniu, ustaw raceActive na false.
local function finish()print("touched the finish line")raceActive = falseendSprawdź swoją grę, aby upewnić się, że widzisz tylko jedną kopię deklaracji testu.
Śledzenie czasu
Podobnie jak oświadczenie if, pętla czasowa może również użyć kondycji, aby zobaczyć, czy powinna zostać wykonana. Aby ustawić czas gracza, stwórz kalendarz używając prawdziwego czasu do pętli, który biega tylko wtedy, gdy raceActive prawdziwy.
W dolnej części skryptu, wpisz while raceActive == true do. Wciśnij Enter, aby automatycznie ukończyć i dodać end.
finishLine.Touched:Connect(partTouched)while raceActive == true doendAby zliczyć czas gry, w pętli, dodaj 1 do zmiennej timePassed co sekundę. Zawiera to stwierdzenie drukowania, aby sprawdzić 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 Okienku Wyjścia.
Przyznawanie Medali Graczom
Aby ukończyć, użyj if stat with multiple conditions, aby nagrodzić graczy innymi nagrodami medali w zależności od ich wykonywanie. Użyj if stat i dwóch if stat, aby sprawdzić czas końca gracza i nagrodzić go poprawną nagrodą.
Aby potwierdzić, że każda medalla może być przyznana, użyj stwierdzeń drukowania.
local function finish()raceActive = falseprint("You finished in " .. timePassed)endAby przyznać złoty medal, zaimplementuj if, który porównuje timePassed z upragnionym czasem końca. Ten przykład sprawdza, czy czas gracza był mniejszy lub równy 10 sekund.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")endendSprawdź i potwierdź, że można przyznać złoty medal.
Dodanie dodatkowych warunków
Teraz, gdy przetestowałeś na złotym medalu, warunki kodu dla innych medali używając słowa kluczowego elseif .
Dla srebrnej medali użyj elseif i następnego pożądanego przedziału czasowego. W tym przykładzie zasięg jest większy niż 10 sekund, ale mniejszy niż lub równy 20 sekund.
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 medalu brązowego. Sprawdź swój kod przy użyciu 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 na srebrne i brązowe medale.
Wskazówki dotyczące rozwiązywania problemów
Jeśli nie widzisz srebra i brązu, spróbuj jednej z poniżej.
- Każdy elseif powinien mieć wtedy po swoim stanie.
- W partTouched() upewnij się, że druga kondycja if-statystyki używa ==, jak w raceActive == true.
- Sprawdź, czy każdy elseif jest w zakresie. Każdy elseif warunek musi być pomiędzy pierwszą linijką end i jego ostatnim kończyć.
Dodanie warunku Else
Jeśli gracz nie zdobył żadnej z medali, powinieneś go zachęcić do spróbowania ponownie. W tym przypadku możesz użyć else stwierdzenia, które biegnie, jeśli żadne inne warunki nie są prawdziwe, aby pokazać im wiadomość.
Poniżej ostatniego elseif i powyżej end , rozpocznij nową linię i wpisz else. Poniżej niej użyj drukowania, aby je zachęcić do spróbowania ponownie.
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. Playtest, aby zobaczyć pozostałą wiadomość.
Podsumowanie
Struktury kontrolne mogą mieć więcej niż jeden scenariusz. Użyj, jeśli stwierdzenia, aby ustawić początkowe stwierdzenie do sprawdzać, a następnie dodać tyle elseif warunków, jak niezbędne. W końcu użyj else , aby określić, co powinno się stać, jeśli wszystkie dane warunki są fałszywe.
Na górze wszystkie warunki zostaną sprawdzone, a tylko pierwszy prawidłowy warunek będzie wykonany kod. Warunki pozostałe nie zostaną sprawdzone ani ich kod nie będzie wykonany.
Po zakończeniu projektu możesz rozbudować go, aby dodać nowe elementy w kilku dodatkowych sposobach.
- Dodaj kod, aby gracze mogli powtarzać wyścig, dotykając linii startowej, gdy skończą.
- Zdobądź sposób na wyświetlenie czasu podczas wyścigu. Możesz wyświetlić czas na części używając interfejsu użytkownika powierzchni, jak w Samouczku tworzenia czasowego mostu.
Completed script
local timePassed = 0
local finishLine = script.Parent
-- Używany do utrzymywania końca() i timer'a z powtarzaniem się, gdy wyścig się zakończy
local raceActive = true
-- Biegnie, gdy gracz dotyka linii końcowej i pokazuje im 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 dotyka części, gdy jest aktywna rasa
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