Ćwiczenie pętli - stwórz most z czasem

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

Ten projekt jest kolejnym przykładem praktycznego wykorzystania pętli for. W tym moście gracze będą dotykać przycisku, aby most stał się przejezdny przez ograniczony czas, zanim zniknie. Aby stworzyć timer i pokazać pozostały czas graczowi, użyjesz pętli for.

Ustaw projekt

Ten most można włączyć do dowolnego projektu Roblox z wyzwaniami opartymi na ruchu, takimi jak obby.

Stwórz części

  1. Znajdź miejsce do zbudowania mostu, na przykład rzekę lub dużą lukę w obby. Stwórz trzy zakotwiczone części jak poniżej.

    • TimerDisplay
    • Bridge
    • ButtonBridge
  2. Gdy jest nieaktywny, most będzie półprzezroczysty. Aby to zrobić, wybierz Bridge i zmień jego właściwości.

    • Transparency = 0.8
    • CanCollide = False

Stwórz wyświetlacz timera

Podczas przechodzenia przez most, gracze będą musieli widzieć, ile sekund pozostało, zanim most zniknie. Jednym ze sposobów wyświetlania obrazów lub tekstu jest dodanie obiektu zwanego Surface GUI do części. Surface GUIs mogą być również używane do tworzenia znaków w grze, niestandardowych pasków zdrowia i systemów inwentarza. Ten samouczek przeprowadzi przez to szybko, ale więcej informacji można znaleźć w sekcji Tutorials.

  1. Wybierz TimerDisplay i dodaj SurfaceGui. Następnie, jako dziecko Surface Gui, dodaj TextLabel.

  2. Wybierz Surface GUI. W Właściwościach wprowadź następujące zmiany:

    • Zmień Face, aby móc zobaczyć etykietę tekstową z przodu timera, gdzie gracz patrzy.
  3. Wybierz TextLabel. W Właściwościach wprowadź następujące zmiany:

    • Ustaw Size na {1, 0},{1, 0}.
    • Ustaw TextScaled na true.
    • Ustaw Text na pusty. Tekst zostanie zaktualizowany za pomocą skryptu.

Ustaw skrypt

Teraz, gdy timer jest na miejscu, stwórz skrypt, aby kontrolować most i wyświetlać numer odliczania graczom.

  1. W części Bridge dodaj nowy skrypt o nazwie TimedBridge. W tym skrypcie stwórz następujące zmienne.

    local bridge = script.Parent
    local button = workspace.ButtonBridge
    local timerText = workspace.TimerDisplay.SurfaceGui.TextLabel
    -- Jak długo most będzie solidny
    local timerDuration = 5

Zaimplementuj interakcję dotykową

Aby użyć mostu, musisz stworzyć dwie funkcje. Jedna funkcja sprawi, że most będzie przejezdny i wyświetli timer. Druga funkcja będzie nasłuchiwać, czy gracz dotknie przycisku, który aktywuje most.

  1. Stwórz nową funkcję o nazwie startTimer() z instrukcją print wewnątrz. Użyjesz instrukcji print, aby przetestować swój kod.

    local timerDuration = 5
    local function startTimer()
    print("Odliczanie rozpoczęte")
    end
  2. Zaimplementuj funkcję o nazwie buttonPressed(), aby sprawdzić, czy humanoid dotyka przycisku. Funkcja powinna przyjmować parametr partTouched, a następnie mieć pustą instrukcję if, jeśli humanoid zostanie wykryty w tej części.

    local function startTimer()
    print("Odliczanie rozpoczęte")
    end
    local function buttonPressed(partTouched)
    local character = partTouched.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    end
    end
  3. Aby rozpocząć timer, w instrukcji if wywołaj funkcję startTimer().

    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
  4. Pod koniec buttonPressed(), połącz funkcję buttonPressed() z zdarzeniem Touched przycisku.

    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
    button.Touched:Connect(buttonPressed)
  5. Uruchom projekt. Dotknij części i sprawdź w oknie Wyjścia, aby zobaczyć instrukcję print.

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

Na tym etapie, jeśli most nie działa zgodnie z zamierzeniami, spróbuj jednej z poniższych opcji.

Problem: Komunikat o błędzie mówiący: "... nie jest ważnym członkiem workspace".

  • W skrypcie TimedBridge sprawdź, czy wszystkie części są napisane dokładnie tak, jak widoczne w Eksploratorze.

Problem: Nie widać części.

  • Upewnij się, że wszystkie trzy części są zakotwiczone.
  • Sprawdź właściwość Transparency dla mostu.

Stwórz timer

Kiedy gracze stają na moście, startTimer() sprawi, że most będzie przejezdny i rozpocznie odliczanie. Gdy timer osiągnie 0, most stanie się nieprzejezdny, powodując, że każdy, kto nie jest wystarczająco szybki, spadnie.

Spraw, aby most był przejezdny

Na początek skrypt będzie musiał sprawić, że most będzie solidny, czyli kolizyjny, a następnie uruchomić timer, aż stanie się nieprzejezdny.

  1. Aby uczynić most przejezdnym, w startTimer(), zmień właściwość Transparency mostu na 0 (nieprzezroczysty) i właściwość CanCollide na true.

    local function startTimer()
    -- Uczyń most widocznym i przejezdnym
    bridge.Transparency = 0
    bridge.CanCollide = true
    end
  2. Aby stworzyć timer, który odlicza, stwórz pętlę for z następującymi wartościami.

    • Zmienna kontrolna: nazwana count, ustawiona na timerDuration.
    • Koniec: 0
    • Inkrement: -1
    local function startTimer()
    -- Uczyń most widocznym i przejezdnym
    bridge.Transparency = 0
    bridge.CanCollide = true
    for count = timerDuration, 0, -1 do
    end
    end
  3. Aby pokazać timer graczom, zmień tekst w timerText, aby wyświetlał count, wpisując timerText.Text = count. Za każdym razem, gdy pętla for przechodzi przez iterację, pokaże graczom następny numer w timerze.

    for count = timerDuration, 0, -1 do
    timerText.Text = count
    end
  4. Użyj funkcji task.wait, aby pętla for działała tylko raz na sekundę.

    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
  5. Uruchom grę. Gdy dotkniesz przycisku, most powinien się pojawić, a timer zacznie działać, a następnie zakończy się.

Zapobiegaj ponownemu uruchamianiu mostu

Zauważ jednak, że jeśli poruszasz się po przycisku, timer będzie się ciągle restartował.

Dzieje się tak, ponieważ pętla for jest wywoływana za każdym razem, gdy dotykasz przycisku, i zaczyna pętlę for od początku. Aby zapobiec ciągłemu restartowaniu timera, musisz dodać boolean, rodzaj zmiennej, która będzie kontrolować, czy startTimer() może być ponownie wywołane.

Booleany są zapisywane w ten sam sposób co inne zmienne, ale zamiast używać liczb lub ciągów, mogą być ustawione tylko na true lub false. W tej sytuacji skrypt użyje boolean, aby sprawdzić, czy timer jest obecnie uruchomiony, zanim go uruchomi.

  1. Na początku swojego skryptu, pod swoimi zmiennymi, stwórz zmienną o nazwie timerActive i ustaw ją na false, ponieważ nikt jeszcze nie nacisnął przycisku.

    local timerDuration = 5
    local timerActive = false
    local function startTimer()
  2. Aby upewnić się, że timer zaczyna się tylko wtedy, gdy boolean timerActive jest false, dodaj drugi warunek do instrukcji if w buttonPressed().

    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and timerActive == false then
    startTimer()
    end
    end
  3. Aby zapobiec ponownemu uruchomieniu startTimer() przed upływem czasu, ustaw boolean timerActive na true.

    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
  4. W funkcji startTimer(), po pętli for, przywróć most do jego oryginalnych właściwości, zmieniając przezroczystość mostu na 0.8 i CanCollide na false.

    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
    -- Pętla for, która odlicza od timerDuration
    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
    -- Uczyń most nieprzejezdnym
    bridge.Transparency = 0.8
    bridge.CanCollide = false
    end
  5. Ostatnią rzeczą, aby zresetować most, jest zmiana timerText na pusty ciąg, tak jak było na początku. Następnie ustaw boolean timerActive na false.

    bridge.Transparency = 0.8
    bridge.CanCollide = false
    timerText.Text = ""
    timerActive = false
  6. Przetestuj grę i sprawdź, czy most może być używany wielokrotnie.

Pełny skrypt mostu z czasem

local bridge = script.Parent
-- Pobiera przycisk, jak jest napisany w Eksploratorze
local button = workspace.ButtonBridge
-- Pobiera część do wyświetlania
local timerPart = workspace.TimerDisplay
-- Pobiera tekst, który będzie wyświetlał timer
local timerText = timerPart.SurfaceGui.TextLabel
-- Jak długo gracze mają na przejście przez most
local timerDuration = 5
local timerActive = false
local function startTimer()
print("Odliczanie rozpoczęte")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- Pętla for, która odlicza od timerDuration
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- Uczyń most nieprzejezdnym
bridge.Transparency = 0.8
bridge.CanCollide = false
timerText.Text = ""
timerActive = false
end
local function buttonPressed(partTouched)
local character = partTouched.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
print("część dotknięta")
if humanoid and timerActive == false then
print("rozpoczynanie timera")
startTimer()
end
end
button.Touched:Connect(buttonPressed)

Podsumowanie

Pętle można łączyć z różnymi środkami interakcji, aby stworzyć zabawne momenty w grze. W tym samouczku stworzono most z czasem, który działa jako odliczanie. Podczas odliczania gracze mają ograniczony czas na przejście.

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