Ćwiczenie pętli - stwórz czasowy most

*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 zastosowania pętli for w praktyczny sposób. W tym przypadku gracze będą dotykać przycisku, aby most stał się przejezdny przez ograniczony czas, zanim zniknie. Aby stworzyć licznik czasu i pokazać pozostały czas graczowi, użyjesz pętli for.

Ustaw projekt

Ten most można użyć w każdym projekcie Roblox z wyzwaniami opartymi na ruchu, takim jak obby.

Stwórz części

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

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

    • Transparency = 0.8
    • CanCollide = False

Stwórz wyświetlacz licznika czasu

Podczas przechodzenia przez most gracze będą potrzebować zobaczyć, ile sekund pozostało do zniknięcia mostu. Jednym ze sposobów wyświetlania obrazów lub tekstu jest dodanie obiektu nazwanego 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 poradnik przeprowadzi przez to szybko, ale więcej informacji można znaleźć w sekcji Poradniki.

  1. Wybierz TimerDisplay i dodaj SurfaceGui. Następnie, dodaj do Surface Gui obiekt TextLabel.

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

    • Zmień Face, aby zobaczyć etykietę tekstu z przodu licznika, w kierunku, w którym patrzy gracz.
  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 licznik czasu jest na miejscu, stwórz skrypt do kontrolowania mostu i wyświetlania numeru 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 twardy
    local timerDuration = 5

Zakoduj interakcję dotykową

Aby używać mostu, musisz stworzyć dwie funkcje. Jedna funkcja umożliwi przechodzenie po moście i wyświetli licznik czasu. Druga funkcja będzie nasłuchiwać, czy gracz dotknie przycisku, który aktywuje most.

  1. Stwórz nową funkcję o nazwie startTimer() z poleceniem print wewnątrz. Użyjesz polecenia print do testowania swojego kodu.


    local timerDuration = 5
    local function startTimer()
    print("Odliczanie rozpoczęte")
    end
  2. Zakoduj funkcję o nazwie buttonPressed(), aby sprawdzić, czy humanoid dotyka przycisku. Funkcja powinna mieć parametr partTouched, a następnie pusta 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 uruchomić licznik czasu, 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 wydarzeniem 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 Output, aby zobaczyć polecenie 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 sugestii.

Problem: Komunikat o błędzie: "... nie jest ważnym członkiem workspace".

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

Problem: Nie widać części.

  • Upewnij się, że wszystkie trzy części są przywiązane.
  • Sprawdź właściwość przezroczystości mostu.

Stwórz licznik czasu

Kiedy gracze stają na moście, startTimer() uczyni most przejezdnym i uruchomi licznik czasu. Gdy licznik czasu osiągnie 0, most stanie się nieprzeszły, co spowoduje, że każdy, kto nie zdąży, spadnie.

Uczyń most przejezdnym

Na początek skrypt musi uczynić most solidnym, czyli zderzającym, a następnie uruchomić licznik czasu, aż stanie się nieprzeszły.

  1. Aby uczynić most przejezdnym, w startTimer() zmień właściwość przezroczystości 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ć licznik czasu, który odlicza, stwórz pętlę for z następującymi wartościami.

    • Zmienna kontrolna: nazwana count, ustawiona na timerDuration.
    • Koniec: 0
    • Inkrementacja: -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ć licznik czasu graczom, zmień tekst w timerText, aby wyświetlał count, wpisując timerText.Text = count. Każdorazowo, gdy pętla for przechodzi przez iterację, wyświetli graczom następny numer w liczniku.


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


    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
  5. Uruchom doświadczenie. Gdy dotkniesz przycisku, most powinien się pojawić, a licznik czasu powinien wystartować, a następnie zakończyć.

Zapobiegaj ponownemu uruchamianiu mostu

Zauważ, że jeśli poruszasz się po przycisku, licznik czasu 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 zatrzymać licznik czasu przed ciągłym restartowaniem, musisz dodać boolen, rodzaj zmiennej, która będzie kontrolować, czy startTimer() można ponownie wywołać.

Booleans są pisane tak samo jak 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 booleanu do sprawdzenia, czy licznik czasu obecnie działa, zanim go uruchomi.

  1. Na początku 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 licznik czasu rozpocznie się tylko wtedy, gdy boolean timerActive wynosi 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 powstrzymać startTimer() przed ponownym uruchomieniem przed upływem czasu licznika, ustaw boolean timerActive na true.


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
  4. W funkcji startTimer() po pętli for, ustaw most z powrotem na jego oryginalne 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 nieprzechodnim
    bridge.Transparency = 0.8
    bridge.CanCollide = false
    end
  5. Ostatnia rzecz, aby zresetować most, to ustawić timerText na pusty ciąg, tak jak to 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 i upewnij się, że most można używać wielokrotnie.

Pełny skrypt czasowego mostu


local bridge = script.Parent
-- Uzyskuje przycisk po jego nazwie w Eksploratorze
local button = workspace.ButtonBridge
-- Uzyskuje część dla wyświetlacza
local timerPart = workspace.TimerDisplay
-- Uzyskuje tekst, który będzie wyświetlał licznik
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 nieprzechodnim
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("rozpoczynam licznik")
startTimer()
end
end
button.Touched:Connect(buttonPressed)

Podsumowanie

Pętle mogą być łączone z różnymi formami interakcji, aby tworzyć zabawne chwile w rozgrywce. W tym poradniku stworzono czasowy most przy użyciu pętli for, która działa jako odliczanie. Podczas odliczania gracze mają ograniczony czas na przekroczenie mostu.

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