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

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

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.
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.
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 solidnylocal 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.
Stwórz nową funkcję o nazwie startTimer() z instrukcją print wewnątrz. Użyjesz instrukcji print, aby przetestować swój kod.
local timerDuration = 5local function startTimer()print("Odliczanie rozpoczęte")endZaimplementuj 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")endlocal function buttonPressed(partTouched)local character = partTouched.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenendendAby rozpocząć timer, 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 zdarzeniem 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 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.
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 przejezdnymbridge.Transparency = 0bridge.CanCollide = trueendAby 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 przejezdnymbridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendendAby 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 dotimerText.Text = countendUżyj funkcji task.wait, aby pętla for działała tylko raz na sekundę.
for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)endUruchom 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.
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 = 5local timerActive = falselocal function startTimer()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.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and timerActive == false thenstartTimer()endendAby zapobiec ponownemu uruchomieniu startTimer() przed upływem czasu, ustaw boolean timerActive na true.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = trueW 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 = 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 nieprzejezdnymbridge.Transparency = 0.8bridge.CanCollide = falseendOstatnią 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.8bridge.CanCollide = falsetimerText.Text = ""timerActive = falsePrzetestuj 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.