Samouczki dla średnio zaawansowanych

Fading trap

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

W Śmiertelnym Lawie nauczyłeś się, jak uruchamiać kod w oparciu o zachowanie użytkownika. Ten samouczek pokazuje, jak stworzyć platformę, która znika, gdy użytkownik na nią wejdzie.

Konfiguracja

Jeśli śledziłeś Śmiertelną Lawę, możesz umieścić swoją znikającą platformę nad podłogą z lawą, nad którą użytkownicy nie mogą skakać.

  1. Wstaw część i przesuń ją na miejsce w swoim świecie. Nazwij ją FadingPlatform.

  2. Zmień jej rozmiar, aby użytkownik mógł na niej skoczyć.

  3. Upewnij się, że jest Zablokowana.

  4. Wstaw Skrypt do części, zmień nazwę na FadeOnTouch i usuń domyślny kod.

  5. Utwórz zmienną dla platformy oraz pustą funkcję połączoną z zdarzeniem Touched platformy.


    local platform = script.Parent
    local function fade()
    end
    platform.Touched:Connect(fade)

Znikanie platformy

Znikanie platformy w mgnieniu oka byłoby dość frustrujące, ponieważ użytkownicy nie mieliby szansy na przejście przez lukę. Zamiast tego platforma powinna znikać stopniowo, zanim użytkownicy przez nią przejdą, aby dać im szansę na skok.

Mogłbyś zmieniać właściwość Transparency i czekać bardzo krótko w kółko, aby uzyskać ten efekt, ale stopniowe znikanie wymagałoby przynajmniej 10 zmian między 0 a 1. To 20 linii bardzo powtarzalnego kodu.

Można to osiągnąć dużo skuteczniej, korzystając z pętli for, która powtarza kod określoną liczbę razy. Każde powtórzenie kodu nazywa się iteracją. Pętla for jest definiowana przez trzy rzeczy, oddzielone przecinkami:

  • Zmienna kontrolna - Zmienna tworzona i używana do liczenia pętli. W tym przykładzie to count, a wartość początkowa to 1.
  • Wartość końcowa - Wartość, do której musi dojść, aby pętla się zatrzymała. W tym przykładzie to 10.
  • Przyrost krokowy (opcjonalne) - Określa, co dodać do zmiennej kontrolnej w każdej pętli. Jeśli zostanie pominięte, domyślnie wynosi 1, więc w tym przykładzie jest to zbędne.

W FadeOnTouch:

  1. W funkcji utwórz pętlę for, zaczynając od 1, która iteruje 10 razy.

  2. Wewnątrz pętli for ustaw właściwość Transparency na zmienną kontrolną podzieloną przez 10.

  3. Wywołaj funkcję task.wait() z czasem 0.1.


    local platform = script.Parent
    local function fade()
    for count = 1, 10 do
    platform.Transparency = count / 10
    task.wait(0.1)
    end
    end
    platform.Touched:Connect(fade)

Gdy pętla działa, count zwiększa się o 1 z każdą iteracją. Oznacza to, że Transparency platformy wzrośnie o 0.1 co 0.1 sekundy, osiągając pełną przezroczystość po 1 sekundy.

Ponowne pojawienie się

Po zniknięciu platformy użytkownicy powinni przez nią przejść. Platforma powinna również wrócić kilka sekund po zniknięciu - w przeciwnym razie użytkownicy nigdy nie mieliby szansy spróbować skoku ponownie, jeśli nie udałoby im się to za pierwszym razem. Właściwość CanCollide kontroluje, czy użytkownicy mogą przejść przez część.

  1. Ustaw właściwość CanCollide platformy na false po pętli for.

  2. Poczekaj kilka sekund, używając funkcji task.wait().

  3. Ustaw z powrotem właściwość CanCollide na true.

  4. Ustaw z powrotem właściwość Transparency na 0.


    local platform = script.Parent
    local function fade()
    for count = 1, 10 do
    platform.Transparency = count / 10
    task.wait(0.1)
    end
    platform.CanCollide = false
    task.wait(3)
    platform.CanCollide = true
    platform.Transparency = 0
    end
    platform.Touched:Connect(fade)

Zmienna debounce

W Śmiertelnym Lawie nauczyłeś się, że zdarzenie Touched jest uruchamiane za każdym razem, gdy część ciała użytkownika ma kontakt z tą częścią. To zachowanie powoduje problemy, gdy użytkownik przebiega przez znikającą platformę: funkcja będzie uruchamiana wiele razy, resetując pętlę za każdym razem.

Aby kod działał poprawnie, funkcja powinna być uruchamiana tylko raz, gdy użytkownik dotknie platformy po raz pierwszy. Upewnienie się, że akcja jest wyzwalana tylko raz, gdy w przeciwnym razie byłaby wyzwalana wiele razy, nazywa się debouncingiem.

Aby wprowadzić debouncing w funkcji, można użyć zmiennej boolean do monitorowania, czy platforma została już dotknięta. Booleans mogą zawierać tylko wartości true i false. Utwórz zmienną o nazwie isTouched i ustaw ją na false.


local platform = script.Parent
local isTouched = false
local function fade()
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
end
platform.Touched:Connect(fade)

Sprawdzenie zmiennej

Instrukcję if można użyć, aby uruchomić kod w funkcji fade tylko wtedy, gdy zmienna debouncing isTouched ma wartość false. Owiń ciało funkcji fade w instrukcji if, z warunkiem not isTouched.


local platform = script.Parent
local isTouched = false
local function fade()
if not isTouched then
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
end
end
platform.Touched:Connect(fade)

Operator Luau not odwraca wartość tego, co za nim występuje. W kontekście warunkowym oznacza to, że pierwsza instrukcja if działa tak samo jak następujące instrukcje.


if not isTouched then
end
if isTouched == false then
end
if isTouched == nil then
end

Przełącz debouncing

Obecnie kod w funkcji fade zawsze będzie działał, ponieważ isTouched jest false, a not isTouched ocenia się na true. Aby zakończyć proces debouncingu, będziesz musiał przełączyć wartość zmiennej w dwóch miejscach.

  1. Ustaw isTouched na true wewnątrz instrukcji if, zanim platforma zacznie znikać.
  2. Ustaw go z powrotem na false, gdy platforma się pojawi.

local function fade()
if not isTouched then
isTouched = true
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
isTouched = false
end
end
platform.Touched:Connect(fade)

I to wszystko! Teraz przetestuj swój kod, a powinieneś zauważyć, że platforma znika, gdy użytkownik na nią skacze, a następnie wraca kilka sekund później.

Możesz skopiować tę platformę w szerszej luce, aby stworzyć trudną przeszkodę i zmienić prędkość, z jaką znika, aby zbalansować trudność.

Finalny kod


local platform = script.Parent
local isTouched = false
local function fade()
if not isTouched then
isTouched = true
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
isTouched = false
end
end
platform.Touched:Connect(fade)
©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.