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

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.
Selecione TimerDisplay e adicione um SurfaceGui. Em seguida, como parte do Surface Gui, adicione uma 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 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.
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
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.
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, em seguida, ter uma declaraçã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 declaração if, chame a função startTimer().
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendSob o 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 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.
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á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 para timerDuration.
- Fim: 0
- Incremento: -1
local function startTimer()-- Torne a ponte visível e caminhávelbridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendendPara 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 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 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.
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 = 5local timerActive = falselocal function startTimer()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.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and timerActive == false thenstartTimer()endendPara impedir 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-- Torne a ponte não caminhávelbridge.Transparency = 0.8bridge.CanCollide = falseendUma ú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.8bridge.CanCollide = falsetimerText.Text = ""timerActive = falseTeste 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.