Ten projekt jest kolejnym przykładem używania dla pętli w praktyczny sposób. Dla tego mostu gracze będą dotykać przycisku, aby uczynić most przejściowy na czas ograniczony przed jego zniknięciem. Aby stworzyć kalendarz i pokazać pozostały czas dla gracza, będziesz używał dla pętli.
Ustawienie projektu
Ten most może być włączony do dowolnego projektu gry z wykorzystaniem zadań opartych na ruchu, takich jak obby.
Tworzenie części
Znajdź miejsce na zbudowanie mostu, jak rzeka lub duża lukę w obby. Stwórz trzy zakotwiczone części, takie jak poniżej.
- Wyświetlacz liczników
- Most
- Przycisk橋
Gdy nieaktywne, most będzie półprzezroczysty. Aby to zrobić, wybierz Most i zmień jego właściwości.
- Przezroczystość = 0.8
- Możliwość kolidyki = Fałszywy
Utworzenie ekranu kalendarza
Podczas przechodzenia przez most, gracze będą musieli zobaczyć, ile sekund pozostało przed tym, jak most zniknie. Jeden sposób na wyświetlenie obrazów lub tekstu jest poprzez dodanie obiektu nazyjącego się aż powierzchniowy interfejs użytkownika do części. aż powierzchniowy interfejs użytkownika można również używa
Wybierz TimerDisplay i dodaj Powierzchniowy GUI. Następnie, powiązany z GUI powierzchni, dodaj Etykietę tekstową.
Wybierz interfejs powierzchni. W Propnościach dokonaj następujących zmian:
- Zmień Twarz , abyś mógł zobaczyć tekstowe etykietę na froncie licznika, gdzie gracz patrzy.
Wybierz tekst znakomity. W Propnościach dokonaj następujących zmian:
- Ustaw Rozmiar na {1, 0},{1, 0} .
- Ustaw TextScaled na prawdę.
- Ustaw tekst , aby być pusty. tekst zostanie zaktualizowany używając skryptu.
Konfiguracja Skryptu
Teraz, gdy miejsceminutnik, stwórz skrypt, aby kontrolować most i wyświetlać licznik do liczby graczy.
W części Mostu 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 się utrzymywał solidnielocal timerDuration = 5
Kodowanie interakcji dotykowej
Aby użyć mostu, będziesz musiał utworzyć dwa funkcje. Jeden funkcji sprawi, że most będzie chodzić i wyświetlać timer. Druga funkcja będzie słuchać, czy gracz dotyka przycisku, który aktywuje most.
Utwórz nową funkcję o nazwie startTimer() z print statement w środku. Będziesz używać print statement, aby testować swój kod.
local timerDuration = 5local function startTimer()print("Countdown started")endZakoduj funkcję nazwę buttonPressed() , aby sprawdzić, czy humanoid dotyka przycisku. Funkcja powinna akceptować parametr partTouched i następnie mieć pustą if statement, jeśli zostanie wykryty humanoid 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ć licznik, w if oświadczeniu, wezwij 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)Zacznij projekt. Dotknij części i sprawdź okno Wyjście, aby zobaczyć drukowanie oświadczenia.
Wskazówki dotyczące rozwiązywania problemów
W tym momencie, jeśli most nie działa tak, jak zamiast tego, spróbuj jednej z poniższych opcji. Problem : Wiadomość błędu mówiąca: "... is not a valid member of workspace" .
W skrypcie TimedBridge sprawdź, czy wszystkie części są poprawnie wpisane, jak są widoczne w Explorerze. Problem : Nie można zobaczyć części.
Upewnij się, że wszystkie trzy części są zaczepione.
Sprawdź właściwość Przezroczystości dla mostu.
Tworzenie kalendarza
Kiedy gracze krok po kroku przechodzą przez most, startTimer() uczyni most chodalnym i uruchdza timer. Gdy timer osiągnie 0, most stanie się niechodzalny, powodując, że każdy, kto nie jest szybki wystarczająco, upadek.
Uczynienie Mostu Przechodziącego
Aby rozpoczynać, skrypt będzie musiał uczynić most solidnym lub staczalnym, a następnie uruchomić timer, dopóki nie stanie się niechodzalny.
Aby uczynić most przechodzalnym, w startTimer() , zmień właściwość Przezroczystości mostu na 0 (nieprzezroczysty) i właściwość Kolidowania na prawdę.
local function startTimer()-- Uczynij most widoczny i przechodziwalnybridge.Transparency = 0bridge.CanCollide = trueendAby stworzyć kalendarz, który liczy się do góry, stwórz pętę z następującymi wartościami.
- Zmienne sterowanie : nazywa się count , ustawiony na timerDuration .
- Koniec : 0
- Przychód : -1
local function startTimer()-- Uczynij most widoczny i przechodziwalnybridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendendAby pokazać kalendarz dla graczy, zmień tekst w timerText , aby wyświetlić liczbę poprzez wpisanie timerText.Text = count . Każdym razem, gdy for pętli przechodzi przez cykl, będzie pokazywał graczom następną liczbę w kalendarzu.
for count = timerDuration, 0, -1 dotimerText.Text = countendUżyj funkcji task.wait, aby wykonać dla pętli tylko jedną wtórkę.
for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)endZacznij gra. Gdy dotkniesz przycisku, powinien się pojawić most i rozpoczynaćliczyć, a następnie ukończ.
Zachowanie mostu od ponownego uruchomienia
Uwaga jednak, jeśli poruszasz się po przycisku, licznik będzie się resetować.
Dzieje się tak, ponieważ for pętli jest wzywany za każdym razem, gdy dotykasz przycisku i uruchamiasz for pętli od początku. Aby utrzymać licznik od uruchomienia się nieustannie, będziesz musiał dodać zmiennego typu, który będzie kontrolować, czy startTimer() może być ponownie uruchomiony. Booleans są pisane tak samo jak inne zmienne, ale zamiast używać liczb lub ciągów, można je ustawić tylko na prawdę lub fałsz. W tej sytuacji skrypt użyje boolean, aby sprawdzić, czy timer jest obecnie uruchomiony przed jego uruchomieniem.
Na górze swojego skryptu, pod swoimi zmienne, stwórz zmienne nazyjące się timerActive i ustaw go na false, ponieważ nikt jeszcze nie nacisnął przycisku.
local timerDuration = 5local timerActive = falselocal function startTimer()Aby upewnić się, że licznik zacznie się tylko wtedy, gdy timerActive zmiennej prawdziwości jest fałszywe, dodaj drugie warunki do if w buttonPressed() .
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and timerActive == false thenstartTimer()endendAby zapobiec startTimer() bieżącemu przed skończeniem czasera, ustaw prawdziwym timerActive na true.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = trueW funkcji startTimer() po węzłu, ustaw połączenie na jego oryginalne właściwości poprzez zmianę przejrzystości węzła na 0,8 i możliwość kolidywania z falą.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = true-- Dla pętli, która liczy się od czasu odliczania timerDurationfor count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end-- Nie pozwól, aby most był przechodnibridge.Transparency = 0.8bridge.CanCollide = falseendOstatnią rzeczą do zresetowania moста jest zmiana timerText na pustą strungę, taką jak była pierwotnie. Następnie ustaw timerActive na false.
bridge.Transparency = 0.8bridge.CanCollide = falsetimerText.Text = ""timerActive = falseZagrajtestuj i sprawdź, aby upewnić się, że most może być używany wiele razy.
Ukończ skrypt mostu czasowego
local bridge = script.Parent
-- Dostarcza przycisk, gdy jest wpisany w Explorerze
local button = workspace.ButtonBridge
-- Dostarcza część do wyświetlenia
local timerPart = workspace.TimerDisplay
-- Dostarcza tekst, który wyświetli licznik
local timerText = timerPart.SurfaceGui.TextLabel
-- Ile graczy musi 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ętli, która liczy się od czasu odliczania timerDuration
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- Nie pozwól, aby most był przechodni
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 można łączyć z różnymi sposobami interakcji, aby stworzyć zabawne chwile w grze. W tym samouczniku utworzony jest czasowy most używając kryształka, który funkcjonuje jako licznik. Podczas licznika gracze otrzymują ograniczony czas, aby przejść.