Praktyka pętli - stwórz czasowo ustawiony 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 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

  1. 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
  2. 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.

  1. Wybierz TimerDisplay i dodaj SurfaceGui . Następnie, powiązany z Surface Gui, dodaj TextLabel .

  2. 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.
  3. 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.

  1. W części Most 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 solidny
    local 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.

  1. 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 = 5
    local function startTimer()
    print("Countdown started")
    end
  2. Zrealizuj 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")
    end
    local function buttonPressed(partTouched)
    local character = partTouched.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    end
    end
  3. Aby uruchomić minutnik, w oświadczeniu if wezwij funkcję startTimer().


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
  4. Pod końcem buttonPressed(), połącz funkcję buttonPressed() z wydarzeniem przycisku Touched.


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
    button.Touched:Connect(buttonPressed)
  5. 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.

  1. 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ępny
    bridge.Transparency = 0
    bridge.CanCollide = true
    end
  2. Aby 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ępny
    bridge.Transparency = 0
    bridge.CanCollide = true
    for count = timerDuration, 0, -1 do
    end
    end
  3. Aby 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 do
    timerText.Text = count
    end
  4. Użyj funkcji task.wait, aby wykonać pętelę for tylko raz na sekundę.


    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
  5. Uruchom 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.

  1. 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 = 5
    local timerActive = false
    local function startTimer()
  2. 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.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and timerActive == false then
    startTimer()
    end
    end
  3. Aby zapobiec ponownemu uruchomieniu startTimer() przed wygaśnięciem czasu, ustaw prawdziwy timerActive na boolean.


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
  4. W 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 = 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
    end
  5. Ostatnią 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.8
    bridge.CanCollide = false
    timerText.Text = ""
    timerActive = false
  6. Przetestuj 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.