Prática de Loops - crie uma ponte temporizada

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

Este projeto é mais um exemplo de como usar loops for de maneira prática. Para esta ponte, os jogadores tocarão em um botão para que uma ponte seja caminhará por um tempo limitado antes de desaparecer. Para criar um temporizador e mostrar o tempo restante para um jogador, você usará loops for.

Configure o projeto

Esta ponte pode ser incluída em qualquer projeto Roblox com desafios baseados em movimento, como um obby.

Crie as partes

  1. Encontre um lugar para construir uma ponte, como um rio ou um grande vazio em um obby. Crie três partes ancoradas como abaixo.

    • TimerDisplay
    • Bridge
    • ButtonBridge
  2. Quando inativa, a ponte será semi-transparente. Para fazer isso, selecione a Bridge e altere suas propriedades.

    • Transparency = 0.8
    • CanCollide = False

Crie o display do temporizador

Ao atravessar a ponte, os jogadores precisarão ver quantos segundos restam antes que a ponte desapareça. Uma maneira de exibir imagens ou texto é adicionando um objeto chamado Surface GUI a uma parte. Surface GUIs também podem ser usados para criar placas dentro do jogo, barras de saúde personalizadas e sistemas de inventário. Este tutorial irá passar rapidamente por isso, mas mais informações podem ser encontradas na seção Tutoriais.

  1. Selecione TimerDisplay e adicione um SurfaceGui. Em seguida, como parte do Surface Gui, adicione uma TextLabel.

  2. Selecione o Surface GUI. Nas Propriedades, faça as seguintes alterações:

    • Altere a Face para que você possa ver o rótulo de texto na frente do temporizador, onde o jogador está olhando.
  3. Selecione o TextLabel. Nas Propriedades, faça as seguintes alterações:

    • Defina o Size como {1, 0},{1, 0}.
    • Defina TextScaled como verdadeiro.
    • Defina Text para ficar em branco. O texto será atualizado usando o script.

Configure o script

Agora que o temporizador está no lugar, crie um script para controlar a ponte e exibir o número da contagem regressiva para os jogadores.

  1. Na parte Bridge, adicione um novo script chamado TimedBridge. Nesse script, crie as seguintes variáveis.


    local bridge = script.Parent
    local button = workspace.ButtonBridge
    local timerText = workspace.TimerDisplay.SurfaceGui.TextLabel
    -- Quanto tempo a ponte ficará sólida
    local timerDuration = 5

Codifique a interação de toque

Para usar a ponte, você precisará criar duas funções. Uma função fará com que a ponte seja caminhável e exibirá o temporizador. A outra função escutará se um jogador tocar no botão que ativa a ponte.

  1. Crie uma nova função chamada startTimer() com uma instrução print dentro. Você usará a instrução print para testar seu código.


    local timerDuration = 5
    local function startTimer()
    print("Contagem regressiva iniciada")
    end
  2. Codifique uma função chamada buttonPressed() para verificar se um humanoide toca o botão. A função deve aceitar um parâmetro de partTouched e, em seguida, ter uma declaração if vazia se um humanoide for detectado nessa parte.


    local function startTimer()
    print("Contagem regressiva iniciada")
    end
    local function buttonPressed(partTouched)
    local character = partTouched.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    end
    end
  3. Para iniciar o temporizador, na declaração if, chame a função startTimer().


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
  4. Sob o final de buttonPressed(), conecte a função buttonPressed() ao evento Touched do botão.


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
    button.Touched:Connect(buttonPressed)
  5. Execute o projeto. Toque na parte e verifique na janela de Saída para ver a instrução print.

Dicas de solução de problemas

Neste ponto, se a ponte não funcionar como pretendido, tente uma das seguintes opções abaixo.

Problema: Mensagem de erro dizendo: "... não é um membro válido do workspace".

  • No script TimedBridge, verifique se todas as partes estão escritas exatamente como aparecem no Explorer.

Problema: Não consigo ver as partes.

  • Certifique-se de que as três partes estão Ancoradas.
  • Verifique a propriedade Transparency da ponte.

Crie o temporizador

Sempre que os jogadores pisarem na ponte, startTimer() fará com que a ponte seja caminhável e iniciará o temporizador. Uma vez que o temporizador atinge 0, a ponte se tornará não caminhável, fazendo com que qualquer um que não seja rápido o suficiente caia.

Faça a ponte ser caminhável

Para começar, o script precisará tornar a ponte sólida, ou colidível e então iniciar um temporizador até que se torne não caminhável.

  1. Para tornar a ponte caminhável, em startTimer(), altere a propriedade Transparency da ponte para 0 (opaco) e a propriedade CanCollide para true.


    local function startTimer()
    -- Torne a ponte visível e caminhável
    bridge.Transparency = 0
    bridge.CanCollide = true
    end
  2. Para criar um temporizador que conta regressivamente, crie um loop for com os seguintes valores.

    • Variável de controle: chamada count, definida para timerDuration.
    • Fim: 0
    • Incremento: -1

    local function startTimer()
    -- Torne a ponte visível e caminhável
    bridge.Transparency = 0
    bridge.CanCollide = true
    for count = timerDuration, 0, -1 do
    end
    end
  3. Para mostrar o temporizador para os jogadores, altere o texto em timerText para exibir count digitando timerText.Text = count. Cada vez que o loop for passar por uma iteração, ele mostrará aos jogadores o próximo número no temporizador.


    for count = timerDuration, 0, -1 do
    timerText.Text = count
    end
  4. Use uma função task.wait para fazer o loop for rodar apenas uma vez por segundo.


    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
  5. Execute a experiência. Quando você tocar no botão, a ponte deve aparecer e o temporizador vai começar, depois completar.

Impedir que a ponte reinicie

Note, porém, que se você se mover no botão, o temporizador continuará reiniciando.

Isso acontece porque o loop for está sendo chamado cada vez que você toca o botão e reiniciando o loop for desde o início. Para impedir que o temporizador reinicie constantemente, você precisará adicionar um booleano, um tipo de variável, que controlará se startTimer() pode ser chamado novamente.

Booleanos são escritos da mesma forma que outras variáveis, mas em vez de usar números ou strings, eles só podem ser definidos como verdadeiro ou falso. Nesta situação, o script usará um booleano para verificar se o temporizador está atualmente em execução antes de iniciá-lo.

  1. No topo do seu script, sob suas variáveis, crie uma variável chamada timerActive e defina como false, já que ninguém pressionou o botão ainda.


    local timerDuration = 5
    local timerActive = false
    local function startTimer()
  2. Para garantir que o temporizador só comece quando o booleano timerActive for falso, adicione uma segunda condição à declaração if em buttonPressed().


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and timerActive == false then
    startTimer()
    end
    end
  3. Para impedir que startTimer() seja executado novamente antes que o temporizador acabe, defina o booleano timerActive como verdadeiro.


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
  4. Na função startTimer(), após o loop for, defina a ponte de volta às suas propriedades originais alterando a transparência da ponte para 0.8 e CanCollide para false.


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
    -- Loop for que conta regressivamente de timerDuration
    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
    -- Torne a ponte não caminhável
    bridge.Transparency = 0.8
    bridge.CanCollide = false
    end
  5. Uma última coisa para resetar a ponte é alterar o timerText para uma string vazia como estava originalmente. Em seguida, defina o booleano timerActive como falso.


    bridge.Transparency = 0.8
    bridge.CanCollide = false
    timerText.Text = ""
    timerActive = false
  6. Teste e verifique se a ponte pode ser usada várias vezes.

Script completo da ponte temporizada


local bridge = script.Parent
-- Obtém o botão conforme ele é digitado no Explorer
local button = workspace.ButtonBridge
-- Obtém a parte para o display
local timerPart = workspace.TimerDisplay
-- Obtém o Texto que exibirá o temporizador
local timerText = timerPart.SurfaceGui.TextLabel
-- Quanto tempo os jogadores têm para atravessar a ponte
local timerDuration = 5
local timerActive = false
local function startTimer()
print("Contagem regressiva iniciada")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- Loop for que conta regressivamente de timerDuration
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- Torne a ponte não caminhável
bridge.Transparency = 0.8
bridge.CanCollide = false
timerText.Text = ""
timerActive = false
end
local function buttonPressed(partTouched)
local character = partTouched.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
print("parte tocada")
if humanoid and timerActive == false then
print("iniciando temporizador")
startTimer()
end
end
button.Touched:Connect(buttonPressed)

Resumo

Loops podem ser combinados com diferentes meios de interação para criar momentos de jogabilidade divertida. Neste tutorial, uma ponte temporizada é criada usando um loop for que funciona como uma contagem regressiva. Durante a contagem regressiva, os jogadores têm um tempo limitado para atravessar.

©2026 Roblox Corporation, Roblox, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.