W Zabójczej Lawie nauczyłeś się, jak uruchamiać kod na podstawie zachowań użytkowników. Ten samouczek pokazuje, jak stworzyć platformę, która znika, gdy użytkownik na nią wchodzi.
Ustawienia
Jeśli śledziłeś Zabójczą Lawę, możesz umieścić swoją znikającą platformę nad lawowym podłożem, którego użytkownicy nie mogą przeskoczyć.
Wstaw część i przesuń ją na miejsce w swoim świecie. Nazwij ją FadingPlatform.
Zmień jej rozmiar, aby użytkownik mógł na nią wskoczyć.
Upewnij się, że jest Zablokowana.

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

Stwórz zmienną dla platformy i pustą funkcję połączoną z zdarzeniem Touched platformy.
local platform = script.Parentlocal function fade()endplatform.Touched:Connect(fade)
Znikanie platformy
Sprawienie, by platforma znikała w mgnieniu oka, byłoby zupełnie nieprzyjemne, ponieważ użytkownicy mieliby trudności z przeskoczeniem przez lukę. Zamiast tego platforma powinna znikać przed tym, jak użytkownicy przez nią wpadną, aby mieli szansę na skok.
Można by zmieniać właściwość Transparency i czekać bardzo krótki czas w kółko, aby uzyskać ten efekt, ale stopniowe znikanie wymagałoby co najmniej 10 zmian między 0 a 1. To 20 linii bardzo powtarzalnego kodu.
Można to osiągnąć znacznie skuteczniej, używając pętli for, która powtarza kod określoną liczbę razy. Każde wykonanie kodu nazywane jest iteracją. Pętla for jest definiowana przez trzy rzeczy, oddzielone przecinkami:

- Zmienna kontrolna - Zmienna stworzona i używana do zliczania 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.
- Krok inkrementacjiOPTIONAL- 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:
W funkcji stwórz pętlę for, zaczynając od 1, która iteruje 10 razy.
Wewnątrz pętli for ustaw właściwość Transparency na zmienną kontrolną podzieloną przez 10.
Wywołaj funkcję task.wait() z czasem 0.1.
local platform = script.Parentlocal function fade()for count = 1, 10 doplatform.Transparency = count / 10task.wait(0.1)endendplatform.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 sekundzie.
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 się nie uda. Właściwość CanCollide kontroluje, czy użytkownicy mogą przejść przez część.
Ustaw właściwość CanCollide platformy na false po pętli for.
Poczekaj kilka sekund, używając funkcji task.wait().
Ustaw właściwość CanCollide z powrotem na true.
Ustaw właściwość Transparency z powrotem na 0.
local platform = script.Parentlocal function fade()for count = 1, 10 doplatform.Transparency = count / 10task.wait(0.1)endplatform.CanCollide = falsetask.wait(3)platform.CanCollide = trueplatform.Transparency = 0endplatform.Touched:Connect(fade)
Zmienna debouncing
W Zabójczej Lawie nauczyłeś się, że zdarzenie Touched uruchamia się za każdym razem, gdy część ciała użytkownika ma kontakt z częścią. To zachowanie powoduje problemy, gdy użytkownik przebiega przez znikającą platformę: funkcja uruchomi się wiele razy, resetując pętlę za każdym razem.
Aby kod działał poprawnie, funkcja powinna uruchomić się tylko raz, gdy użytkownik dotknie platformy po raz pierwszy. Zapewnienie, że akcja jest wywoływana tylko raz, gdy w przeciwnym razie byłaby wywoływana wiele razy, nazywane jest debouncingiem.
Aby zrealizować debouncing funkcji, można użyć zmiennej boolean, aby śledzić, kiedy platforma została już dotknięta. Booleany mogą zawierać tylko wartości true i false. Stwó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)Sprawdź zmienną
Instrukcja if może być użyta, aby uruchomić kod w funkcji fade tylko wtedy, gdy zmienna debouncing isTouched jest fałszywa. Owiń ciało funkcji fade w instrukcję 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 następuje. W warunkowych terminach oznacza to, że pierwsza instrukcja if zachowuje się tak samo jak instrukcje, które następują.
if not isTouched then
end
if isTouched == false then
end
if isTouched == nil then
endPrzełącz debouncing
Obecnie kod w funkcji fade zawsze będzie się uruchamiał, ponieważ isTouched jest fałszywe, a not isTouched ocenia się na prawdę. Aby zakończyć procedurę debouncingu, musisz przełączyć wartość zmiennej w dwóch miejscach.
- Ustaw isTouched na true wewnątrz instrukcji if, przed tym, jak platforma zacznie znikać.
- Ustaw ją z powrotem na false, gdy platforma się ponownie 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! Przetestuj teraz swój kod, a powinieneś zauważyć, że platforma znika, gdy użytkownik na nią wskakuje, a po kilku sekundach wraca.
Możesz skopiować tę platformę w szerszą lukę, aby stworzyć trudną przeszkodę i zmienić prędkość, z jaką znikają, aby zrównoważyć trudność.
Ostateczny 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)