Wiele warunków

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

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 then
print("Go")
elseif isYellow then
print("Slow")
elseif isPedestrians then
print("Wait")
else
print("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 medal
end
if finishTime >= 5 and <= 10 then
-- Zdobądź srebrny medal
end
if finishTime > 10 and <= 15 then
-- Zdobądź brązowy medal
end

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 medal
elseif finishTime >= 5 and <= 10 then
-- Zdobądź srebrny medal
elseif finishTime > 10 and <= 15 then
-- Zdobądź brązowy medal
end

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.

  1. 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
    >

  2. 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.Parent
    local timePassed = 0
  3. Stwórz funkcję o nazwie finish().


    local timePassed = 0
    local finishLine = script.Parent
    local function finish()
    end
  4. Na 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")
    end
    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    finish()
    end
    end
    finishLine.Touched:Connect(partTouched)
  5. 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.

  1. Utwórz nową zmienną o nazwie raceActive i ustaw ją na true.


    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- Uruchamia się za każdym razem, gdy gracz dotyka części linii mety
    local function finish()
  2. Dodaj drugie warunki do oświadczenia if, aby sprawdzić, czy raceActive jest prawdą, zanim wezwiesz finish().


    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and raceActive == true then
    finish()
    end
    end
  3. Aby zapobiec ponownemu wezwaniu finish(), ustaw raceActive na false.


    local function finish()
    print("touched the finish line")
    raceActive = false
    end
  4. Przetestuj 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.

  1. 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 do
    end
  2. Aby 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 do
    task.wait(1)
    timePassed += 1
    print(timePassed)
    end
  3. Zagraj 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.

  1. Aby potwierdzić, że każda medala może zostać przyznana, użyj oświadczeń drukowanych.


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    end
  2. Aby 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 = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    end
    end
  3. Przetestuj 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 >.

  1. 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 = 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!")
    end
    end
  2. Użyj tego samego wzoru dla brązowego medalu. Sprawdź swój kod za pomocą przykładu poniżej.


    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!")
    end
    end
  3. Testuj 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ść.

  1. 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 = 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

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