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 kontrolne mogą mieć więcej niż jeden warunek. Słowa kluczowe else i elseif mogą tworzyć dodatkowe scenariusze dla tego, co powinno się wydarzyć w różnych warunkach. 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 trasy parkour, gdzie biegacze otrzymują nagrody w zależności od czasu ukończenia.

Kodowanie wielu warunków

W tym projekcie możesz napisać unikalne instrukcje if dla każdej medalu, aby nagrodzić graczy, ale zajmuje to dużo czasu. Weź na przykład poniższy wyimaginowany kod.

Wszystkie instrukcje if
if finishTime < 5 then
-- Otrzymaj złoty medal
end
if finishTime >= 5 and <= 10 then
-- Otrzymaj srebrny medal
end
if finishTime > 10 and <= 15 then
-- Otrzymaj brązowy medal
end

Bardziej czytelny i efektywny sposób kodowania tego to użycie jednej instrukcji if i użycie słowa kluczowego elseif, aby dostarczyć alternatywne warunki do przetestowania, jeśli poprzednie warunki nie są prawdziwe.

Używa elseif i else
if finishTime < 5 then
-- Otrzymaj złoty medal
elseif finishTime >= 5 and <= 10 then
-- Otrzymaj srebrny medal
elseif finishTime > 10 and <= 15 then
-- Otrzymaj brązowy medal
end

Gdy instrukcja if/then jest uruchamiana, zaczyna od góry i uruchamia kod tylko dla pierwszego prawdziwego warunku, który znajdzie.

Ustawienie trasy wyścigu

Zacznij od umieszczenia punktu startowego trasy i linii mety, a następnie stwórz skrypt, aby zmierzyć czas gracza i przyznać różne medale.

  1. Utwórz unieruchomioną część o nazwie FinishLine. Aby przyspieszyć testowanie, umieść start i koniec blisko siebie. Możesz przesunąć linię mety po zakończeniu skryptu.

    Część mety
    Cała trasa
  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. Utwórz funkcję o nazwie finish().

    local timePassed = 0
    local finishLine = script.Parent
    local function finish()
    end
  4. Samodzielnie:

    • Zakoduj funkcję o nazwie partTouched(), która uruchamia finish(), gdy gracz ją dotknie.
    • Połącz część linii 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. Przetestuj grę i sprawdź, czy finish() jest wywoływane, gdy dotkniesz linii mety.

Zapobiegaj powtarzaniu finish()

W tej chwili, gdy gracz dotknie linii mety, finish() jest ciągle wywoływane, dopóki gracz dotyka części.

Użyj zmiennej logicznej, zmiennej, która przechowuje wartość prawda lub fałsz, aby upewnić się, że finish() jest wywoływane 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ę, gdy gracz dotyka 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 zatrzymać ponowne wywoływanie finish(), ustaw raceActive na false.

    local function finish()
    print("dotknięto linii mety")
    raceActive = false
    end
  4. Przetestuj swoją grę, aby sprawdzić, czy widzisz swoje testowe polecenie wydruku tylko raz.

Śledzenie czasu

Podobnie jak instrukcja if, pętla while może również używać warunku, aby sprawdzić, czy powinna działać. Aby zmierzyć czas gracza, utwórz timer za pomocą pętli while true do, która działa tylko wtedy, gdy zmienna logiczna raceActive jest prawdziwa.

  1. Na końcu skryptu wpisz while raceActive == true do. Naciśnij Enter, aby automatycznie dodać end.

    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    end
  2. Aby zmierzyć czas graczy, w pętli dodaj 1 do zmiennej timePassed co sekundę. Dodaj polecenie wydruku, aby przetestować swoją pracę.

    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    task.wait(1)
    timePassed += 1
    print(timePassed)
    end
  3. Przetestuj grę i sprawdź, czy widzisz każdą sekundę wyświetlaną w oknie Output.

Przyznawanie medali graczom

Aby zakończyć, użyj instrukcji if z wieloma warunkami, aby przyznać graczom różne medale w zależności od ich wyników. Użyj instrukcji if i dwóch instrukcji elseif, aby sprawdzić czas ukończenia gracza i przyznać im odpowiedni medal.

  1. Aby potwierdzić, że każda medal może być przyznana, użyj poleceń wydruku.

    local function finish()
    raceActive = false
    print("Ukończyłeś w " .. timePassed)
    end
  2. Aby przyznać złoty medal, zakoduj instrukcję if, która porównuje timePassed z pożądanym czasem 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. Przetestuj i potwierdź, że złoty medal może być przyznany.

Dodaj dodatkowe warunki

Teraz, gdy przetestowałeś złoty medal, zakoduj warunki dla innych 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 jest większy niż 10 sekund, ale mniejszy 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 wzoru 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. Przetestuj srebrne i brązowe medale.

Wskazówki dotyczące rozwiązywania problemów

Jeśli nie widzisz srebrnych i brązowych medali, spróbuj jednego z poniższych.

  • Każde elseif powinno mieć then po swoim warunku.
  • W partTouched(), upewnij się, że drugi warunek instrukcji if używa ==, jak w raceActive == true.
  • Sprawdź, czy każde elseif jest w zakresie. Każdy warunek elseif musi znajdować się między pierwszą linią instrukcji if/then a ostatnim end.

Dodaj warunek else

Jeśli gracz nie zdobył żadnego medalu, powinieneś zachęcić go do spróbowania ponownie. W takim 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 powyżej end, rozpocznij nową linię i wpisz else. Nie dodawaj then. Pod else użyj polecenia wydruku, 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. Przetestuj, aby zobaczyć wiadomość else.

Podsumowanie

Struktury kontrolne mogą mieć więcej niż jeden scenariusz. Użyj instrukcji if, aby ustawić początkowe oświadczenie do sprawdzenia, a następnie dodaj tyle warunków elseif, ile potrzebujesz. Na koniec 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 będą sprawdzane, a tylko pierwszy prawdziwy warunek uruchomi kod. Pozostałe warunki nie będą sprawdzane, ani ich kod nie zostanie uruchomiony.

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 startowej, gdy ukończą.
  • Zaprojektuj sposób wyświetlania czasu podczas wyścigu. Możesz wyświetlić czas na części za pomocą Surface GUI, jak w Stwórz czasowy mostek tutorial.
Zakończony skrypt
local timePassed = 0
local finishLine = script.Parent
-- Używane do zapobiegania powtarzaniu finish() i timera, gdy wyścig się kończy
local raceActive = true
-- Uruchamia się, gdy gracz dotyka linii mety i pokazuje im 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.