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

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.
Wybierz TimerDisplay i dodaj SurfaceGui. Następnie, dodaj do Surface Gui obiekt TextLabel.

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.
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.
W części Bridge dodaj nowy skrypt o nazwie TimedBridge. W tym skrypcie stwórz następujące zmienne.
local bridge = script.Parentlocal button = workspace.ButtonBridgelocal timerText = workspace.TimerDisplay.SurfaceGui.TextLabel-- Jak długo most będzie twardylocal 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.
Stwórz nową funkcję o nazwie startTimer() z poleceniem print wewnątrz. Użyjesz polecenia print do testowania swojego kodu.
local timerDuration = 5local function startTimer()print("Odliczanie rozpoczęte")endZakoduj 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")endlocal function buttonPressed(partTouched)local character = partTouched.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenendendAby uruchomić licznik czasu, w instrukcji if wywołaj funkcję startTimer().
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendPod koniec buttonPressed(), połącz funkcję buttonPressed() z wydarzeniem Touched przycisku.
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbutton.Touched:Connect(buttonPressed)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.
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 przejezdnymbridge.Transparency = 0bridge.CanCollide = trueendAby 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 przejezdnymbridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendendAby 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 dotimerText.Text = countendUżyj funkcji task.wait, aby sprawić, że pętla for działa tylko raz na sekundę.
for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)endUruchom 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.
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 = 5local timerActive = falselocal function startTimer()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.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and timerActive == false thenstartTimer()endendAby powstrzymać startTimer() przed ponownym uruchomieniem przed upływem czasu licznika, ustaw boolean timerActive na true.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = trueW 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 = truebridge.Transparency = 0bridge.CanCollide = true-- Pętla for, która odlicza od timerDurationfor count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end-- Uczyń most nieprzechodnimbridge.Transparency = 0.8bridge.CanCollide = falseendOstatnia 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.8bridge.CanCollide = falsetimerText.Text = ""timerActive = falsePrzetestuj 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.