Armadilha Desvanecente

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

In Deadly Lava , você aprendeu a usar código com base no comportamento do usuário. Este tutorial mostra como fazer uma plataforma que desaparece quando um usuário pisa nela.

Configurando

Se você seguir Deadly Lava, você pode colocar sua plataforma pendurada acima do chão de lava que os usuários não podem pular.

  1. Insira uma peça e mova-a para o lugar em seu mundo. Nomeie-a FadingPlatform .

  2. Redimensioná-lo para que um usuário possa pular sobre ele.

  3. Certifique-se de que seja Anchored .

  4. Insira um Script na peça, renomeie-o para FadeOnTouch e remova o código padrão.

  5. Crie uma variável para a plataforma e uma função vazia conectada ao evento Touched da plataforma.


    local platform = script.Parent
    local function fade()
    end
    platform.Touched:Connect(fade)

Desvanecendo a Plataforma

Ter a plataforma desaparecer em um instante não seria divertido de todo, já que os usuários encontrariam impossível atravessá-la. Em vez disso, a plataforma deve desaparecer antes que os usuários caiam através dela para lhes dar uma chance de desligado.

Você pode alterar a propriedade Transparency e esperar um tempo muito pequeno de novo e novo para obter esse efeito, mas um desvanecimento gradual exigiria pelo menos 10 alterações entre 0 e 1. Isso é 20 linhas de código muito repetitivo.

Isso pode ser alcançado muito mais efetivamente usando um <a href="/reference/engine/databases/databases">for</a> loop que repete o código em um determinado número de vezes. Cada loop do código é conhecido como um <a href="/reference/engine/databases/databases">iteração</a>. Um for loop é 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 de início é 1.
  • Valor de fim da value - O valor que ele tem que chegar para o loop para parar. Neste exemplo, é 10.
  • Incremento de Passo (opcional) - Determina o que adicionar à variável de controle a cada loop. Se for deixado, é padrão para 1, então neste exemplo não é necessário.

Em FadeOnTouch :

  1. Na função, crie um for loop a partir de 1 que itera 10 vezes.

  2. Dentro do for loop, defina a propriedade Transparency para a variável de controle dividida por 10.

  3. Chame a função task.wait() com um tempo de 0.1.


    local platform = script.Parent
    local function fade()
    for count = 1, 10 do
    platform.Transparency = count / 10
    task.wait(0.1)
    end
    end
    platform.Touched:Connect(fade)

Quando a fita se executa, a contagem aumenta por 1 com cada iteração. Isso significa que a Transparency da plataforma aumentará por 0,1 a cada 0,1 segundos, atingindo a transparência completa após 1 segundo.

Reaparecendo

Depois que a plataforma desaparecer, os usuários devem cair através dela. A plataforma também deve retornar alguns segundos depois de desaparecer - caso contrário, os usuários nunca poderão tentar o salto novamente se falharem. A propriedade CanCollide controla se os usuários podem cair através de uma peça.

  1. Defina a propriedade CanCollide da plataforma para false depois do for loop.

  2. Espere alguns segundos usando a função task.wait().

  3. Defina a propriedade CanCollide de volta para true .

  4. Defina a propriedade Transparency de volta para 0 .


    local platform = script.Parent
    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)

Debounce Variável

In Deadly Lava , você aprendeu que o evento Touched acontece cada vez que uma parte do corpo de um usuário entrar em contato com a parte. Este comportamento causa problemas quando um usuário passa pela plataforma piscando: a função será executada várias vezes, redefinindo o loop a cada vez.

Para que o código funcione adequadamente, a função deve ser executada apenas uma vez quando o usuário tocar a plataforma pela primeira vez. Verificar se uma ação só será executada uma vez quando ela seria normalmente executada várias vezes é conhecida como desbobinar .

Para debounce uma função, uma variável Booleano pode ser usada para rastrear quando a plataforma já foi tocada. Booleans só podem conter verdadeiro e falso valores. Crie uma variável chamada 1> isTouched1> e setá-lo para 4> force4> .


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)

Verificando Variáveis

Uma if statement pode ser usada para só executar o código na função de fusão se a variável de debounce isTouched estiver falsa. Wrap the body of the fade function in an if statement with the condition 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 Lua not inverte o valor de qualquer coisa que o segue. Em termos condicionais, isso significa que a primeira declaração se comporta da mesma forma que as declarações que seguir.


if not isTouched then
end
if isTouched == false then
end
if isTouched == nil then
end

Alternando 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 desbounce, você precisará alternar o valor da variável em dois locais.

  1. Defina isTouched para true dentro da declaração if, antes que a plataforma comece a desvanecer.
  2. Definir de volta para false assim que a plataforma tiver 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 desvanecerá quando o usuário pular sobre ela e retornará alguns segundos depois.

Você pode duplicar esta plataforma em um espaçamento maior para criar um desafio de obstáculo e alterar a velocidade em que eles desvanem 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)