W Śmiertelnej lawie nauczyłeś się, jak uruchomić kod na podstawie zachowań użytkownika.Ten samouczek pokazuje, jak stworzyć platformę, która znika, gdy użytkownik na nią wejdzie.
Ustaw
Jeśli podążałeś za Śmiertelną lawą, możesz umieścić swoją znikającą platformę nad podłogą lawy, której użytkownicy nie mogą skakać.
Włóż część i przesuń ją na miejsce w swoim świecie. Nazwij ją FadingPlatform.
Zmień rozmiar, aby użytkownik mógł na nim skoczyć.
Upewnij się, że jest zakotwiczone .
Włóż Skrypt do części, zmień nazwę na FadeOnTouch i usuń domyślny kod.
Utwórz zmienną dla platformy i pustą funkcję połączoną z wydarzeniem platformaTouched.
local platform = script.Parentlocal function fade()endplatform.Touched:Connect(fade)
Rozpłynięcie platforma
Zniknięcie platformy w ciągu jednej chwili nie byłoby zabawne, ponieważ użytkownicy uznaliby to za niemożliwe, aby przekroczyć lukę.Zamiast tego platforma powinna zniknąć zanim użytkownicy przez nią przepadną, aby dać im szansę na wyłączone.
Mógłbyś zmienić właściwość Transparency i czekać bardzo krótki czas za każdym razem, aby uzyskać ten efekt, ale stopniowe zanikanie wymagałoby co najmniej 10 zmian między 0 a 1.To 20 linii bardzo powtarzalnego kodu.
Można to osiągnąć znacznie skuteczniej za pomocą pętli dla , która powtarza kod określoną liczbę razy.Każda pętla kodu jest znana jako iteracja **** .Pętla A jest zdefiniowana z trzema rzeczami, oddzielonymi przecinkami:
- Zmienna kontroli - Zmienna utworzona i używana do liczenia pętli. W tym przykładzie jest to count i początkowa wartość wynosi 1.
- Wartość końcowa - Wartość, którą musi uzyskać, aby pętel się zatrzymał. W tym przykładzie jest to 10.
- Zwiększenie kroku (opcjonalne) - Określa, co dodać do zmiennej kontroli za każdym cyklem.Jeśli zostanie pominięty, domyślnie wynosi 1, więc w tym przykładzie jest niepotrzebny.
W FadeOnTouch :
W funkcji utwórz pętelę for, która zaczyna się od 1, która iteruje 10 razy.
W obrębie pędu for ustaw właściwość Transparency na zmienną kontroli podzieloną przez 10.
Wezwij 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 się uruchamia, liczba zwiększa się o 1 za każdym razem o iteracji.Oznacza to, że platforma Transparency wzrośnie o 0,1 co 0,1 sekundy, osiągając pełną przejrzystość po 1 sekundzie.
Pojaw się ponownie
Po zniknięciu platformy użytkownicy powinni przez nią przejść.Platforma powinna również wrócić kilka sekund po tym, jak zniknie - w przeciwnym razie użytkownicy nigdy nie spróbują ponownie skoczyć, jeśli zawiodą.Właściwość CanCollide kontroluje, czy użytkownicy mogą upaść przez część.
Ustaw właściwość CanCollide platformy na false po pętlu for.
Poczekaj kilka sekund za pomocą funkcji task.wait().
Ustaw właściwość CanCollide powrotem do true.
Ustaw właściwość Transparency powrotem do 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)
Zmiń zmienną Debounce
W Śmiertelnej lawie nauczyłeś się, że wydarzenie Touched uruchamia się za każdym razem, gdy część ciała użytkownika wchodzi w kontakt z częścią.Zachowanie to powoduje problemy, gdy użytkownik przechodzi przez znikającą platforma: funkcja będzie uruchamiana wielokrotnie, co za każdym razem odnowi pętelę.
Aby kod poprawnie działał, funkcja powinna uruchomić się tylko raz, gdy użytkownik po raz pierwszy dotknie platformy.Zapewnienie, że akcja jest uruchamiana tylko raz, gdy w przeciwnym razie zostanie uruchomiona wielokrotnie, nazywa się odbijaniem .
Aby ograniczyć funkcję, zmienna boolean może być używana do śledzenia, kiedy platforma została już dotknięta.Booleany mogą zawierać tylko prawdziwe i fałszywe wartości.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)
Sprawdź zmienną
Oświadczenie if można użyć tylko do uruchamiania kodu w funkcji fade, jeśli zmienna odrzucająca isTouched jest fałszywa.Owiń ciało funkcji zanikania w oświadczeniu if ze zmianą 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 następuje po nim.W warunkiwarunkowych oznacza to, że pierwsze oświadczenie if zachowuje się tak samo jak oświadczenia, które obserwować.
if not isTouched thenendif isTouched == false thenendif isTouched == nil thenend
Przełącz debounce
Obecnie kod w funkcji fade zawsze będzie uruchamiany, ponieważ isTouched jest fałszywy, a not isTouched ocenia się na prawdę.Aby ukończyć rutynę debounce, musisz przełączyć wartość zmiennej w dwóch miejscach.
- Ustaw wewnątrz oświadczenia przed rozpoczęciem zanikania platformy.
- Wróć do niego po false, gdy platforma ponownie 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 jest to! Teraz przetestuj swój kod i powinieneś znaleźć, że platforma znika, gdy użytkownik na nią skacze i wraca kilka sekund później.
Możesz powielić tę platformę na szerszej luce, aby stworzyć wyzywające przeszkody i zmienić prędkość, w której znikają, aby zrównoważyć trudność.
kodkońcowy
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)