In Deadly Lava , hai imparato a fare in modo che il codice si attivi in base al comportamento dell'utente. Questo tutorial ti mostra come creare una piattaforma che scompare quando un utente la mette piedi sopra.
Configurazione
Se hai seguito Deadly Lava, puoi posizionare la tua piattaforma sbiadita sopra il pavimento di lava che gli utenti non possono saltare attraverso.
Inserisci una parte e posizionala nel tuo Mondo. Nome FadingPlatform .
Ridimensionarlo in modo che un utente possa saltarci sopra.
Assicurati che sia Anchored .
Inserisci uno Script nella parte, rinominalo in FadeOnTouch e rimuovi il codice predefinito.
Crea una variabile per la piattaforma e una funzione vuota connessa all'evento Touched della Piattaforma.
local platform = script.Parentlocal function fade()endplatform.Touched:Connect(fade)
Piattaforma che scompare
Avere la piattaforma scompaiono in un istante non sarebbe divertente affatto, poiché gli utenti troveranno impossibile ottenere attraverso il divario. Invece, la piattaforma dovrebbe svanire prima che gli utenti cadano attraverso di esso per dargli la possibilità di Off.
Potresti cambiare la proprietà Transparency e aspettare un molto breve periodo di tempo ancora e ancora una volta per ottenere questo effetto, ma un graduale svanire richiederebbe almeno 10 cambiamenti tra 0 e 1. Questo è 20 righe di codice molto ripetitivo.
Questo può essere raggiunto molto più efficacemento utilizzando un per loop che ripetisce il codice un numero specifico di volte. Ogni loop del codice è conosciuto come un iterazione . Un for loop è definito con tre cose, separate da virgole:
- Variabile di controllo - La variabile creata e utilizzata per contare i loop. In questo esempio, è count e il valore di partenza è 1.
- Valore di finezza - Il valore che deve ottenere per il loop per fermarsi. In questo esempio, è 10.
- Aumento di passo (opzionale) - Determina cosa aggiungere alla variabile di controllo ad ogni loop. Se lasciato, è predefinito 1, quindi in questo esempio non è necessario.
In FadeOnTouch :
Nella funzione, crea un for loop che inizia da 1 che itera 10 volte.
All'interno del for loop, imposta la proprietà Transparency alla variabile di controllo divisa da 10 .
Chiama la funzione task.wait() con un tempo di 0.1 .
local platform = script.Parentlocal function fade()for count = 1, 10 doplatform.Transparency = count / 10task.wait(0.1)endendplatform.Touched:Connect(fade)
Quando il loop viene eseguito, aumenta il conteggio di 1 con ciascun incremento. Ciò significa che la Transparency della Piattaformaaumenterà di 0,1 ogni 0,1 secondi, raggiungendo la piena trasparenza dopo 1 secondo.
Riapparizione
Dopo che la piattaforma è scomparsa, gli utenti dovrebbero cadere attraverso di essa. La piattaforma dovrebbe anche tornare a pochi secondi dopo essersi scomparsa - altrimenti, gli utenti non potrebbero mai provare a provare il salto di nuovo se fallissero. La proprietà CanCollide controlla se gli utenti possono cadere attraverso una parte.
Imposta la proprietà CanCollide della piattaforma su false dopo il for loop.
Attendere pochi secondi utilizzando la funzione task.wait() .
Imposta la proprietà CanCollide su true .
Imposta la proprietà Transparency su 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)
Debounce variabile
In Deadly Lava , hai imparato che l'evento Touched viene eseguito ogni volta che una parte del corpo di un utente viene a contatto con la parte. Questo comportamento causa problemi quando un utente attraversa la Piattaformasbiadente: la funzione viene eseguita più volte, ripristinando il ciclo ogni volta.
Per il corretto funzionamento del codice, la funzione dovrebbe essere eseguita solo una volta quando l'utente tocca la piattaforma per la prima volta. Questo per garantire che un'azione venga attivata solo una volta quando altrimenti verrebbe attivata più volte è conosciuta come debouncing .
Per debounce una funzione, una variabile boolean può essere utilizzata per tenere traccia quando la piattaforma è già stata toccata. I booleani possono contenere solo vero e falso valori. Crea una variabile chiamata 2> isTouched2> e imposta su 5> force5> .
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)
Controllo delle variabili
Un if statement può essere usato per eseguire solo il codice nella funzione fade se la variabile isTouched che si sta eseguendo è falsa. Wrap the body of the fade function in an if statement con la condizione 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)
L'operatore Lua not inverte il valore di qualsiasi cosa che lo segue. In Condizionicondizionali, questo significa che la prima frase if si comporta uguale alle dichiarazioni che Seguire.
if not isTouched thenendif isTouched == false thenendif isTouched == nil thenend
Attiva/disattiva il Debounce
Attualmente, il codice nella funzione fade eseguirà sempre poiché isTouched è falso e not isTouched valuta vero. Per completare la routine di debounce, dovrai attivare il valore della variabile in due posizioni.
- Imposta isTouched su true all'interno della dichiarazione if, prima che la piattaforma inizi a sbiadire.
- Impostalo su false una volta che la piattaforma è tornata.
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)
E andiamo! Prova il tuo codice ora, e dovresti trovare che la piattaforma svanisce quando l'utente salta su di essa e torna pochi secondi dopo.
Puoi duplicare questa piattaforma in un più ampio spazio per creare un ostacolo impegnativo e cambiare la velocità con cui sbiadiscono per bilanciare la difficoltà.
Codice finale
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)