W Deadly Lava nauczyłeś się, jak wywołać kod w oparciu o zachowanie użytkownika. Ten samouczek pokazuje ci, jak zrobić platformę, która zniknie, gdy użytkownik na nią kroczy.
Ustawianie
Jeśli podążałeś za Śmiertelną Lawą, możesz umieścić swoją znikającą platformę ponad lawą, którą użytkownicy nie mogą skakać przez.
Umieść część i przesuń ją do miejsca w swoim świecie. Zadaj jej imię FadingPlatform .
Zmień rozmiar, aby użytkownik mógł na nim skakać.
Upewnij się, że jest Zakotwiczone .
Umieść Skrypt w części, zmień go na FadeOnTouch i usuń kod domyślny.
Utwórz zmienne dla platformy i pustą funkcję połączoną z wydarzeniem Touched platforma.
local platform = script.Parentlocal function fade()endplatform.Touched:Connect(fade)
Znikanie Platformy
Mając platformę zniknąć w mgnieniu oka nie byłoby zabawy wcale, ponieważ użytkownicy znaleźliby to niemożliwe, aby przekroczyć przepaś, a zamiast tego platforma powinna nanąć się przed użytkownikami, aby dać im szansę na wyłączone.
Możesz zmienić właściwość Transparency i czekać bardzo krótką chwilę ponad i ponad razy, aby uzyskać ten efekt, ale stopniowe zanikanie wymagałoby co najmniej 10 zmian między 0 a 1. To jest 20 linijek bardzo powtarzalnego kodu.
Można to osiągnąć znacznie bardziej skutecznie, używając pętli for , która powtarza kod specjalną liczbę razy. Każda pętla kodu jest znana jako iteracja . A pętla kodu jest zdefiniowana z trzech rzeczy, oddzielonych przez przecinki:
- Zmienna sterowa - Zmienna utworzona i używana do liczenia pętli. W tym przykładzie jest count i wartość początkowa to 1.
- Wartość końcowa - Wartość, która musi mieć, aby kąt się zatrzymał. W tym przykładzie jest to 10.
- Krok pożyczki (opcjonalny) - określa, co dodać do zmiennej kontrolnej za każdym razem, gdy pętla się zakończy. Jeśli zostawiony, zostanie ustawiony na 1, więc w tym przykładzie nie jest to niezbędne.
W FadeOnTouch :
W funkcji utwórz pętlię for zaczynającą się od 1, która powtarza się 10 razy.
Wewnątrz for pętli ustaw właściwość Transparency na zmienne kontrolne dzielone przez 10.
Zadzwoń 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ę wykonuje, liczba zwiększa się o 1 za każdym razem, gdy następuje. Oznacza to, że Transparency platformazwiększa się o 0,1 za każde 0,1 sekundy, osiągając pełną przejrzystość po 1 sekundzie.
Reappearing
Po zniknięciu platformy użytkownicy powinni przez nią spaść. Platforma powinna również wrócić w ciągu kilku sekund po jej zniknięciu - w przeciwnym wypadku użytkownicy nigdy nie będą mogli ponownie spróbować skoku, jeśli nie udało się. Właściwość CollideCan kontroluje, czy użytkownicy mogą spaść przez część.
Ustaw właściwość CanCollide platformy na false po for pętli.
Poczekaj kilka sekund przy użyciu funkcji task.wait().
Ustaw właściwość CanCollide na true .
Ustaw właściwość Transparency 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)
Zmienne wyrzucenie
W Śmiertelnej Lawy dowiedziałeś się, że wydarzenie Touched każdorazowo biega, gdy część ciała użytkownika dotyka części. Zachowanie to powoduje problemy, gdy użytkownik przechodzi przez znikającą platforma: funkcja będzie działać wiele razy, resetując cykl za każdym razem.
Aby kod działał poprawnie, funkcja powinna zostać wykonana tylko raz, gdy użytkownik dotyka platformy po raz pierwszy. Upewnienie się, że akcja zostanie wykonana tylko raz, gdy w przeciwnym razie zostanie wykonana wiele razy, jest znane jako dobouncing .
Aby odskocznię funkcję, zmienne Boolean można użyć do śledzenia, kiedy platforma została już dotknięta. Booleany mogą zawierać tylko prawdziwe i fałszywe wartości. Stwórz zmienne nazyjące się 1> isTouched1> i ustaw go na 4> false4>.
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)
Sprawdzanie zmiennej
Zwrotka if może być używana tylko do wykonania kodu w funkcji fade, jeśli zmienne debounce isTouched jest fałszywa. Zwróć ciało funkcji fade w if z oświadczeniem 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 Lua not odwraca wartość wszystkich następnych stwierdzeń. W warunkikondycyjnych oznacza to, że pierwsza if statement zachowuje się tak samo jak stwierdzenia, które obserwować.
if not isTouched thenendif isTouched == false thenendif isTouched == nil thenend
Włączanie i wyłączanie odwrotów
Obecnie kod w funkcji fade zawsze będzie się wykonany, ponieważ isTouched jest fałszywy, a not isTouched ocenia się do prawdy. Aby ukończyć rutynę debounce, będziesz musiał ustawić wartość zmiennej w dwóch miejscach.
- Ustaw isTouched na true w środku if oświadczenia, zanim platforma zacznie się zaniknąć.
- Zresetuj go do false po ponownym pojawieniu się platformy.
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! Testuj swój kod teraz, a powinieneś zobaczyć, że platforma zniknie, gdy użytkownik na niej skocz i powróci kilka sekund później.
Możesz sklonować tę platformę w większym odstępie czasu, aby stworzyć wyzwujące przeszkodzenie i zmienić prędkość, w której znikają, aby dostosować trudność.
Kod koń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)