Wielokrotne warunki

*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 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 else

if isGreen then
print("Idź")
elseif isYellow then
print("Zwolnij")
elseif isPedestrians then
print("Czekaj")
else
print("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 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 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 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 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.

  1. 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
  2. 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.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ą 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")
    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. 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.

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


    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- Uruchamia się, gdy gracz dotknie części linii mety
    local function finish()
  2. Dodaj drugi warunek do instrukcji if, aby sprawdzić, czy raceActive jest prawdziwe przed wywołaniem 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 wywołaniu finish(), ustaw raceActive na false.


    local function finish()
    print("dotknięto linii mety")
    raceActive = false
    end
  4. Przeprowadź 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.

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

  1. Aby potwierdzić, że każdy medal można przyznać, użyj instrukcji print.


    local function finish()
    raceActive = false
    print("Ukończyłeś w " .. timePassed)
    end
  2. Aby 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 = false
    print("Ukończyłeś w " .. timePassed)
    if timePassed <= 10 then
    print("Otrzymujesz złoty medal!")
    end
    end
  3. Przeprowadź 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.

  1. 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 = 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!")
    end
    end
  2. Użyj tego samego schematu dla brązowego medalu. Sprawdź swój kod z poniższym przykładem.


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

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

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
©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.