En Lava mortal, aprendiste cómo activar el código según el comportamiento del usuario. Este tutorial te muestra cómo hacer una plataforma que desaparece cuando un usuario la pisa.
Configurando
Si siguiste Deadly Lava, puedes colocar tu plataforma desapariblest sobre el suelo de lava que los usuarios no pueden saltar.
Inserta una parte y móvala en su mundo. Nombrarlo FadingPlatform .
Cámbialo para que un usuario pueda saltar sobre él.
Asegúrese de que esté Anchored .
Inserta un Script en la parte, renombralo a FadeOnTouch y elimina el código predeterminado.
Crea una variable para la plataforma y una función vacía conectada al evento Touched de la plataforma.
local platform = script.Parentlocal function fade()endplatform.Touched:Connect(fade)
Desapariciendo la plataforma
Tener que desaparecer la plataforma en un instante no sería divertido en absoluto ya que los usuarios encontrarían imposible cruzar el espacio. En cambio, la plataforma debería desaparecer antes de que los usuarios fallen a través de ella para darles una oportunidad de salir.
Podrías cambiar la propiedad Transparency y esperar un muy corto tiempo una y otra vez para obtener este efecto, pero un gradual desvanecimiento requeriría al menos 10 cambios entre 0 y 1. Eso es 20 líneas de código muy repetitivo.
Esto se puede lograr mucho más eficazmente utilizando un ciclo de para que repite el código un número específico de veces. Cada ciclo del código se conoce como un iteración . Un ciclo de código se define con tres cosas, separadas por comas:
- Variable de control - La variable creada y usada para contar los ciclos. En este ejemplo, es count y el valor de inicio es 1.
- Valor final - El valor que tiene que alcanzar para que el ciclo se detenga. En este ejemplo, es 10.
- Incremento de paso (opcional) - Determina qué agregar a la variable de control de cada bucle. Si se deja fuera, se restablece a 1, por lo que en este ejemplo no es necesario.
En FadeOnTouch :
En la función, crea un for bucle que comienza desde 1 que itera 10 veces.
Dentro del for loop, establece la propiedad Transparency a la variable de control dividida por 10 .
Llamar la función task.wait() con un tiempo de 0.1 .
local platform = script.Parentlocal function fade()for count = 1, 10 doplatform.Transparency = count / 10task.wait(0.1)endendplatform.Touched:Connect(fade)
Cuando la buclea se ejecuta, aumenta el conteo en 1 con cada itación. Esto significa que la Transparency de la plataforma aumentará 0.1 cada 0.1 segundos, alcanzando la máxima transparencia después de 1 segundo.
Reapareciendo
Luego de que la plataforma haya desaparecido, los usuarios deberían caer a través de ella. La plataforma también debería volver en unos segundos después de que se desvanezca - de lo contrario, los usuarios nunca podrían probar el salto de nuevo si fallan. La propiedad CanCollide controla si los usuarios pueden caer a través de una parte.
Establece la propiedad CanCollide de la plataforma a false después de la ronda de for.
Espere unos segundos usando la función task.wait()
Establece la propiedad CanCollide de nuevo a true .
Establece la propiedad Transparency de vuelta a 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)
Desviar Variable
En Lava mortal, aprendiste que el evento Touched cada vez que un usuario toca una parte del cuerpo entra en contacto con la parte. Este comportamiento causa problemas cuando un usuario corre a través de la plataforma desapariblemente: la función se ejecutará varias veces, reiniciando el ciclo cada vez.
Para que el código funcione correctamente, la función solo debe ejecutarse una vez cuando el usuario toque la plataforma por primera vez. Asegurarse de que se ejecute una acción solo una vez cuando de lo contrario se ejecutaría múltiples veces es conocido como debouncing .
Para debounce una función, una variable de Booleano puede usarse para rastrear cuando la plataforma ya ha sido tocada. Los booleanos solo pueden contener valores verdadero y falso. Crea una variable llamada 2> isTouched2> y establece que 5> false5> .
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)
Revisando la variable
Una declaración if se puede usar para solo ejecutar el código en la función de desaparición si la variable de debounce isTouched es falsa. Wrapped el cuerpo de la función de desaparición en una declaración de if con la condición 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)
El operador Lua not invierte el valor de lo que lo sigue. En términos condicionales, esto significa que la primera declaración si se comporta como las declaraciones que seguir.
if not isTouched thenendif isTouched == false thenendif isTouched == nil thenend
Alternar el desvío
Actualmente, el código en la función fade siempre se ejecutará porque isTouched es falso y not isTouched evaluates para ser verdad. Para completar la ruta de debounce, necesitarás alternar el valor de la variable en dos lugares.
- Establece isTouched a true dentro de la declaración if, antes de que la plataforma comience a desaparecer.
- Establece de nuevo en false una vez que la plataforma haya reaparecido.
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)
¡Y ahí lo tienes! Prueba tu código ahora, y deberías encontrar que la plataforma se desvanece cuando el usuario se pone en ella y vuelve unos segundos después.
Puedes duplicar esta plataforma en un mayor espacio para crear un obstáculo desafiante y cambiar la velocidad en la que desaparecen para equilibrar la dificultad.
Código Final
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)