Ten projekt jest kolejnym przykładem wykorzystania pętli w praktyczny sposób.Dla tego mostu gracze dotkną przycisku, aby uczynić most przejściowym na ograniczony czas, zanim zniknie.Aby utworzyć zegar i pokazać pozostały czas graczowi, użyjesz pętli.
Ustaw projekt
Most można włączyć do każdego projektu gry z wyzwaniami opartymi na ruchu, takich jak obby.
Twórz części
Znajdź miejsce, w którym można zbudować most, takie jak rzeka lub duża luk w obby. Stwórz trzy zakotwiczone części, tak jak poniżej.
- Wyświetlanie czasu
- Most
- Mostek przycisków
Gdy nieaktywne, most będzie półprzezroczysty. Aby to zrobić, wybierz Most i zmień jego właściwości.
- Przezroczystość = 0.8
- Możliwość kolizji = fałsz
Stwórz wyświetlenie czasomierza
Przy przekraczaniu mostu gracze będą musieli zobaczyć, ile czasu pozostało, zanim most zniknie.Jednym ze sposobów wyświetlania obrazów lub tekstu jest dodanie obiektu o nazwie GUI powierzchni do części. Powierzchniowe interfejsy użytkownika mogą być również używane do tworzenia znaków w grze, niestandardowych pasków zdrowia i systemów ekwipunku.Ten samouczek przejdzie przez to szybko, ale więcej informacji można znaleźć w sekcji Samouczki.
Wybierz TimerDisplay i dodaj SurfaceGui . Następnie, powiązany z Surface Gui, dodaj TextLabel .
Wybierz interfejs powierzchni GUI. W właściwościach dokonaj następujących zmian:
- Zmień twarz , abyś mógł zobaczyć etykietę tekstową na froncie timera, gdzie gracz patrzy.
Wybierz etykietę tekstową. W właściwościach dokonaj następujących zmian:
- Ustaw rozmiar na .
- Ustaw TextScaled na prawdę.
- Ustaw tekst na pusty. Tekst zostanie zaktualizowany za pomocą skryptu.
Ustaw skrypt
Teraz, gdy czasomierz jest miejsce, stwórz skrypt, aby kontrolować most i wyświetlać liczbę odliczania dla graczy.
W części Most 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
Zakoduj interakcję dotykową
Aby skorzystać z mostu, musisz utworzyć dwie funkcje.Jedna funkcja sprawi, że most będzie przejezdny i wyświetli zegar.Inna funkcja będzie słuchać, jeśli gracz dotknie przycisku aktywującego most.
Stwórz nową funkcję o nazwie startTimer() z oświadczeniem druku w środku. Użyjesz oświadczenia druku, aby przetestować swój kod.
local timerDuration = 5local function startTimer()print("Countdown started")endZrealizuj funkcję o nazwie buttonPressed(), aby sprawdzić, czy humanoid dotknie przycisku.Funkcja powinna zaakceptować parametr partTouched, a następnie mieć puste oświadczenie if, jeśli wykryto humanoida w tej części.
local function startTimer()print("Countdown started")endlocal function buttonPressed(partTouched)local character = partTouched.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenendendAby uruchomić minutnik, w oświadczeniu if wezwij funkcję startTimer().
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendPod końcem buttonPressed(), połącz funkcję buttonPressed() z wydarzeniem przycisku Touched.
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbutton.Touched:Connect(buttonPressed)Wykonaj projekt. Skontaktuj się z częścią i sprawdź okno wyjścia, aby zobaczyć oświadczenie o wydruku.
Wskazówki dotyczące rozwiązywania problemów
W tym momencie, jeśli most nie działa zgodnie z przeznaczeniem, spróbuj jednego z poniższych. Problem : Komunikat o błędzie mówiący: "... is not a valid member of workspace" .
W skrypcie TimedBridge sprawdź, czy wszystkie części są wymówione dokładnie tak, jak są widoczne w Explorerze. Problem : Nie widzę części.
Upewnij się, że wszystkie trzy części są zakotwiczone.
Sprawdź właściwość przejrzystości dla mostu.
Utwórz zegar
Za każdym razem, gdy gracze wkroczą na most, startTimer() sprawi, że most będzie przechodzony i uruchomi zegar.Gdy czasomierz osiągnie 0, most stanie się nieprzejezdny, powodując, że każdy, kto nie jest wystarczająco szybki, upadek.
Uczynij most przechodnim
Aby rozpoczynać, skrypt musi uczynić most solidnym lub kolizyjnym, a następnie uruchomić minutnik, dopóki nie stanie się nieprzejezdny.
Aby most był przejezdny, w startTimer() zmień właściwość przejrzystości mostu na 0 (nieprzezroczysta) i właściwość CanCollide na prawdę.
local function startTimer()-- Spraw, aby most był widoczny i dostępnybridge.Transparency = 0bridge.CanCollide = trueendAby stworzyć minutnik, który odlicza, utwórz pętelę for z następującymi wartościami.
- Zmienna kontroli : nazwana count , ustawiona na timerDuration .
- Koniec : 0
- Zwiększenie : -1
local function startTimer()-- Spraw, aby most był widoczny i dostępnybridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendendAby pokazać zegar graczom, zmień tekst w timerText , aby wyświetlić liczbę odliczania, wpisując timerText.Text = count .Za każdym razem, gdy pętla for przechodzi przez iterację, pokaże graczom następną liczbę w timерze.
for count = timerDuration, 0, -1 dotimerText.Text = countendUżyj funkcji task.wait, aby wykonać pętelę for tylko raz na sekundę.
for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)endUruchom gra. Po dotknięciu przycisku powinien pojawić się most i zegar rozpocznie rozpoczynać, a następnie zakończy.
Zatrzymaj most od ponownego uruchamiania
Zauważ jednak, jeśli poruszasz się po przycisku, czasomierz będzie nadal się restartować.
Dzieje się tak, ponieważ pętla for jest wywoływana za każdym razem, gdy dotykasz przycisku i rozpoczynasz pętlę for od początku.Aby zapobiec ciągłemu restartowaniu timera, musisz dodać prawdziwy lub fałszywy, typ zmiennej, który będzie kontrolował, czy startTimer() można ponownie wezwać. Booleany są pisane w taki sam sposób, jak inne zmienne, ale zamiast używać liczb lub ciągów, mogą być ustawione tylko na prawdę lub fałsz.W tej sytuacji skrypt użyje booleana, aby sprawdzić, czy czasomierz jest obecnie uruchomiony, zanim go uruchomisz.
Na górze swojego skryptu, pod swoimi zmiennymi, stwórz zmienną o nazwie timerActive i ustaw ją na false, ponieważ nikt jeszcze nie naciśnął przycisku.
local timerDuration = 5local timerActive = falselocal function startTimer()Aby upewnić się, że czasomierz będzie uruchamiany tylko wtedy, gdy zmienna timerActive boolean jest fałszywa, dodaj drugą warunek do oświadczenia 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 wygaśnięciem czasu, ustaw prawdziwy timerActive na boolean.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = trueW funkcji startTimer(), po pętli for, ustaw most powrotnie do jego oryginalnych właściwości, zmieniając przejrzystość mostu na 0,8 i CanCollide na fałsz.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = true-- Dla pętla, który odlicza czas od czasu trwania timerafor count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end-- Zrób most nieprzejezdnybridge.Transparency = 0.8bridge.CanCollide = falseendOstatnią rzeczą, która resetuje most, jest zmiana timerText na pustą strunę, tak jak była pierwotnie.Następnie ustaw timerActive prawdziwość na fałsz.
bridge.Transparency = 0.8bridge.CanCollide = falsetimerText.Text = ""timerActive = falsePrzetestuj i sprawdź, czy most może być używany wielokrotnie.
Ukończ skrypt mostu czasowego
local bridge = script.Parent
-- Zdobywa przycisk, gdy jest wpisany w Explorer
local button = workspace.ButtonBridge
-- Zdobywa część do wyświetlenia
local timerPart = workspace.TimerDisplay
-- Zdobywa tekst, który wyświetli zegar
local timerText = timerPart.SurfaceGui.TextLabel
-- Jak długo gracze muszą przejść przez most
local timerDuration = 5
local timerActive = false
local function startTimer()
print("Countdown started")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- Dla pętla, który odlicza czas od czasu trwania timera
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- Zrób most nieprzejezdny
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("part touched")
if humanoid and timerActive == false then
print("starting timer")
startTimer()
end
end
button.Touched:Connect(buttonPressed)
Podsumowanie
Pętle mogą być łączone z różnymi sposobami interakcji, aby stworzyć zabawne chwile w grze.W tym samouczku stworzono most czasowy za pomocą pętla for, który funkcjonuje jako odliczanie.Podczas odliczania gracze otrzymują ograniczony czas na przekroczenie.