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 um botão para tornar a ponte transitável por um tempo limitado antes que ela desapareça. Para criar um temporizador e mostrar o tempo restante para um jogador, você usará loops for.

Configurar o projeto

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

Criar partes

  1. Encontre um lugar para construir uma ponte, como um rio ou uma grande lacuna 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

Criar a exibição 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 no jogo, barras de saúde personalizadas e sistemas de inventário. Este tutorial 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 filho do Surface Gui, adicione um 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 Size para {1, 0},{1, 0}.
    • Defina TextScaled como verdadeiro.
    • Deixe Text em branco. O texto será atualizado usando o script.

Configurar 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

Codificar a interação de toque

Para usar a ponte, você precisará criar duas funções. Uma função tornará a ponte transitável e exibirá o temporizador. A outra função ouvirá se um jogador tocar o 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 então ter uma instruçã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 instruçã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. No 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 todas as três partes estão Ancoradas.
  • Verifique a propriedade Transparency para a ponte.

Criar o temporizador

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

Tornar a ponte transitável

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

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

    local function startTimer()
    -- Torna a ponte visível e transitá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 como timerDuration.
    • Fim: 0
    • Incremento: -1
    local function startTimer()
    -- Torna a ponte visível e transitável
    bridge.Transparency = 0
    bridge.CanCollide = true
    for count = timerDuration, 0, -1 do
    end
    end
  3. Para mostrar o temporizador aos 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 o jogo. Quando você tocar o botão, a ponte deve aparecer e o temporizador começará, depois completará.

Impedir que a ponte reinicie

Observe que, se você se mover no botão, o temporizador continuará reiniciando.

Isso acontece porque o loop for está sendo chamado toda vez que você toca o botão e reiniciando o loop for do começo. Para evitar 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 podem ser definidos apenas 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, abaixo das 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 à instruçã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 evitar 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
    -- Torna a ponte não transitável
    bridge.Transparency = 0.8
    bridge.CanCollide = false
    end
  5. Uma última coisa para redefinir 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 o jogo 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 digitado no Explorer
local button = workspace.ButtonBridge
-- Obtém a parte para a exibição
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
-- Torna a ponte não transitá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 divertidos. 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.