Em Lava Mortal, você aprendeu a ativar código com base no comportamento do usuário.Este tutorial mostra como fazer uma plataforma que desaparece quando um usuário pisa nela.
Preparar
Se você seguiu Lava Mortal, você pode colocar sua plataforma desaparecente acima do piso de lava que os usuários não podem pular.
Insira uma parte e mova-a para o lugar em seu mundo. Nomeie-a FadingPlatform .
Redimensione-o para que um usuário possa saltar sobre ele.
Certifique-se de que é Ancorado .
Insira um Script na parte, renomeie-a para FadeOnTouch e remova o código padrão.
Crie uma variável para a plataforma e uma função vazia conectada ao evento Touched.
local platform = script.Parentlocal function fade()endplatform.Touched:Connect(fade)
Desaparecer a plataforma
Ter a plataforma desaparecer em um instante não seria divertido de jeito, pois os usuários achariam impossível atravessar a brecha.Em vez disso, a plataforma deve desaparecer antes que os usuários passem por ela para dar-lhes uma chance de desligado.
Você poderia alterar a propriedade Transparency e esperar um tempo muito curto repetidamente para obter esse efeito, mas uma transição gradual exigiria pelo menos 10 mudanças entre 0 e 1.São 20 linhas de código muito repetitivo.
Isso pode ser alcançado de maneira muito mais eficiente usando um ciclo para que repete o código um número específico de vezes.Cada loop do código é conhecido como uma iteração .Um ciclo for é definido com três coisas, separadas por vírgulas:
- Variável de controle - A variável criada e usada para contar os loops. Neste exemplo, é count e o valor inicial é 1.
- Valor final - O valor que precisa chegar para o ciclo parar. Neste exemplo, é 10.
- Incremento de passo (opcional) - Determina o que adicionar à variável de controle a cada loop.Se deixado de fora, ele padrão para 1, então neste exemplo é desnecessário.
Em FadeOnTouch :
Na função, crie um for ciclo começando por 1 que itera 10 vezes.
Dentro do loop for, defina a propriedade Transparency dentro da variável de controle dividida por 10.
Chame a função task.wait() com um tempo de 0.1.
local platform = script.Parentlocal function fade()for count = 1, 10 doplatform.Transparency = count / 10task.wait(0.1)endendplatform.Touched:Connect(fade)
Quando o ciclo é executado, o número de contagens aumenta em 1 a cada iteração.Isso significa que o da plataforma aumentará em 0.1 a cada 0.1 segundos, atingindo a transparência total após 1 segundo.
Reaparecer
Depois que a plataforma desaparecer, os usuários devem passar por ela.A plataforma também deve voltar alguns segundos depois de desaparecer - caso contrário, os usuários nunca conseguiriam tentar o pulo novamente se falhassem.A propriedade CanCollide controla se os usuários podem cair através de uma parte.
Defina a propriedade CanCollide da plataforma para false após o loop for.
Espere alguns segundos usando a função task.wait().
Defina a propriedade CanCollide de volta para true.
Defina a propriedade Transparency de volta para 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)
Variável de desaceleração
Em Lava Mortal, você aprendeu que o evento Touched ocorre cada vez que uma parte do corpo de um usuário entra em contato com a parte.Este comportamento causa problemas quando um usuário corre através da plataforma desaparecente: a função será executada várias vezes, reiniciando o loop a cada vez.
Para o código funcionar corretamente, a função deve ser executada apenas uma vez quando o usuário toca a plataforma pela primeira vez.Garantir que uma ação só seja acionada uma vez quando, caso contrário, seria acionada várias vezes é conhecido como debouncing .
Para desacelerar uma função, uma variável booleano pode ser usada para acompanhar quando a plataforma já foi tocada.Booleans só podem conter verdadeiros e falsos valores.Crie uma variável chamada isTouched e defina-a para 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)
Verifique a variável
Uma declaração if pode ser usada para executar apenas o código na função fade se a variável de debounce isTouched for falsa.Envolva o corpo da função de desaparecimento em uma declaração if com a condição 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)
O operador Luau not reverte o valor de qualquer coisa que o siga.Em termos condicionais, isso significa que a primeira declaração if se comporta da mesma maneira que as declarações que seguir.
if not isTouched thenendif isTouched == false thenendif isTouched == nil thenend
Ativar o debounce
Atualmente, o código na função fade sempre será executado porque isTouched é falso e not isTouched avalia para verdadeiro.Para completar a rotina de debounce, você precisará alternar o valor da variável em dois locais.
- Defina isTouched dentro da declaração true dentro da declaração if, antes que a plataforma comece a desaparecer.
- Defina-o de volta para false uma vez que a plataforma tenha 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)
E é isso! Teste seu código agora e você deve encontrar que a plataforma desaparece quando o usuário pula nela e retorna alguns segundos depois.
Você pode duplicar essa plataforma através de um espaço maior para criar um obstáculo desafiador e alterar a velocidade em que eles desaparecem para equilibrar a dificuldade.
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)