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
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

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.
Selecione TimerDisplay e adicione um SurfaceGui. Em seguida, como filho do Surface Gui, adicione um TextLabel.

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.
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.
Na parte Bridge, adicione um novo script chamado TimedBridge. Nesse script, crie as seguintes variáveis.
local bridge = script.Parentlocal button = workspace.ButtonBridgelocal timerText = workspace.TimerDisplay.SurfaceGui.TextLabel-- Quanto tempo a ponte ficará sólidalocal 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.
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 = 5local function startTimer()print("Contagem regressiva iniciada")endCodifique 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")endlocal function buttonPressed(partTouched)local character = partTouched.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenendendPara iniciar o temporizador, na instrução if, chame a função startTimer().
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendNo final de buttonPressed(), conecte a função buttonPressed() ao evento Touched do botão.
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbutton.Touched:Connect(buttonPressed)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.
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ávelbridge.Transparency = 0bridge.CanCollide = trueendPara 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ávelbridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendendPara 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 dotimerText.Text = countendUse uma função task.wait para fazer o loop for rodar apenas uma vez por segundo.
for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)endExecute 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.
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 = 5local timerActive = falselocal function startTimer()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.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and timerActive == false thenstartTimer()endendPara evitar que startTimer() seja executado novamente antes que o temporizador acabe, defina o booleano timerActive como verdadeiro.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = trueNa 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 = truebridge.Transparency = 0bridge.CanCollide = true-- Loop for que conta regressivamente de timerDurationfor count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end-- Torna a ponte não transitávelbridge.Transparency = 0.8bridge.CanCollide = falseendUma ú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.8bridge.CanCollide = falsetimerText.Text = ""timerActive = falseTeste 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.