Este proyecto es otro ejemplo de cómo utilizar bucles for de manera práctica. Para este puente, los jugadores tocarán un botón para hacer que un puente sea transitable durante un tiempo limitado antes de que desaparezca. Para crear un temporizador y mostrar el tiempo restante a un jugador, utilizarás bucles for.
Configurar el proyecto
Este puente se puede incluir en cualquier proyecto de Roblox que tenga desafíos basados en movimiento, como un obby.
Crear partes
Encuentra un lugar para construir un puente, como un río o un gran hueco en un obby. Crea tres partes ancladas como a continuación.
- TimerDisplay
- Bridge
- ButtonBridge

Cuando esté inactivo, el puente será semitransparente. Para hacerlo, selecciona el Bridge y cambia sus propiedades.
- Transparency = 0.8
- CanCollide = False
Crear la visualización del temporizador
Al cruzar el puente, los jugadores necesitarán ver cuántos segundos quedan antes de que el puente desaparezca. Una forma de mostrar imágenes o texto es añadiendo un objeto llamado Surface GUI a una parte. Las Surface GUIs también se pueden utilizar para crear señales en el juego, barras de salud personalizadas y sistemas de inventario. Este tutorial pasará rápido sobre esto, pero se puede encontrar más información en la sección de Tutoriales.
Selecciona TimerDisplay y añade una SurfaceGui. Luego, como hijo de la Surface Gui, añade un TextLabel.

Selecciona la Surface GUI. En las Propiedades, haz los siguientes cambios:
- Cambia la Face para que puedas ver la etiqueta de texto en el frente del temporizador donde el jugador está mirando.
Selecciona el TextLabel. En las Propiedades, haz los siguientes cambios:
- Establece Size en {1, 0},{1, 0}.
- Establece TextScaled en true.
- Deja Text en blanco. El texto se actualizará utilizando el script.
Configurar el script
Ahora que el temporizador está en su lugar, crea un script para controlar el puente y mostrar la cuenta regresiva a los jugadores.
En la parte Bridge, añade un nuevo script llamado TimedBridge. En ese script, crea las siguientes variables.
local bridge = script.Parentlocal button = workspace.ButtonBridgelocal timerText = workspace.TimerDisplay.SurfaceGui.TextLabel-- Cuánto tiempo permanecerá sólido el puentelocal timerDuration = 5
Codificar la interacción al tocar
Para usar el puente, necesitarás crear dos funciones. Una función hará que el puente sea transitable y mostrará el temporizador. La otra función escuchará si un jugador toca el botón que activa el puente.
Crea una nueva función llamada startTimer() con una declaración de impresión dentro. Usarás la declaración de impresión para probar tu código.
local timerDuration = 5local function startTimer()print("Cuenta regresiva comenzada")endCodifica una función llamada buttonPressed() para comprobar si un humanoide toca el botón. La función debe aceptar un parámetro de partTouched y luego tener una declaración if vacía si se detecta un humanoide en esa parte.
local function startTimer()print("Cuenta regresiva comenzada")endlocal function buttonPressed(partTouched)local character = partTouched.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenendendPara comenzar el temporizador, en la declaración if, llama a la función startTimer().
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendAl final de buttonPressed(), conecta la función buttonPressed() al evento Touched del botón.
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbutton.Touched:Connect(buttonPressed)Ejecuta el proyecto. Toca la parte y verifica en la ventana de Salida para ver la declaración de impresión.
Consejos de solución de problemas
En este punto, si el puente no funciona como se quería, intenta una de las siguientes opciones.
Problema: Mensaje de error diciendo: "... no es un miembro válido de workspace".
- En el script TimedBridge, verifica que todas las partes estén escritas exactamente como aparecen en el Explorador.
Problema: No se pueden ver las partes.
- Asegúrate de que las tres partes estén ancladas.
- Comprueba la propiedad de Transparencia para el puente.
Crear el temporizador
Cada vez que los jugadores pisen el puente, startTimer() hará que el puente sea transitable y comenzará el temporizador. Una vez que el temporizador llegue a 0, el puente se volverá no transitable, haciendo que cualquiera que no sea lo suficientemente rápido caiga.
Hacer que el puente sea transitable
Para comenzar, el script deberá hacer que el puente sea sólido o colisionable y luego iniciar un temporizador hasta que se vuelva no transitable.
Para hacer que el puente sea transitable, en startTimer(), cambia la propiedad de Transparencia del puente a 0 (opaco) y la propiedad CanCollide a true.
local function startTimer()-- Hacer que el puente sea visible y transitablebridge.Transparency = 0bridge.CanCollide = trueendPara crear un temporizador que cuente hacia atrás, crea un bucle for con los siguientes valores.
- Variable de control: llamada count, establecida en timerDuration.
- Fin: 0
- Incremento: -1
local function startTimer()-- Hacer que el puente sea visible y transitablebridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendendPara mostrar el temporizador a los jugadores, cambia el texto en timerText para mostrar el count escribiendo timerText.Text = count. Cada vez que el bucle for pasa por una iteración, mostrará a los jugadores el siguiente número en el temporizador.
for count = timerDuration, 0, -1 dotimerText.Text = countendUtiliza una función task.wait para hacer que el bucle for se ejecute solo una vez por segundo.
for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)endEjecuta la experiencia. Cuando toques el botón, el puente debería aparecer y el temporizador comenzará, luego completará.
Evitar que el puente se reinicie
Ten en cuenta que, si te mueves sobre el botón, el temporizador seguirá reiniciándose.
Esto se debe a que el bucle for se llama cada vez que tocas el botón y comienza el bucle for desde el principio. Para evitar que el temporizador se reinicie constantemente, necesitarás añadir un booleano, un tipo de variable, que controle si startTimer() se puede llamar nuevamente o no.
Los booleanos se escriben de la misma manera que otras variables, pero en lugar de usar números o cadenas, solo se pueden establecer en true o false. En esta situación, el script utilizará un booleano para verificar si el temporizador está actualmente en funcionamiento antes de iniciarlo.
En la parte superior de tu script, debajo de tus variables, crea una variable llamada timerActive y establécela en false ya que nadie ha presionado el botón todavía.
local timerDuration = 5local timerActive = falselocal function startTimer()Para asegurarte de que el temporizador solo comience cuando el booleano timerActive sea falso, añade una segunda condición a la declaración if en buttonPressed().
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and timerActive == false thenstartTimer()endendPara evitar que startTimer() se ejecute nuevamente antes de que el temporizador se agote, establece el booleano timerActive en true.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = trueEn la función startTimer(), después del bucle for, restablece el puente a sus propiedades originales cambiando la transparencia del puente a 0.8 y CanCollide a false.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = true-- Bucle for que cuenta hacia atrás desde timerDurationfor count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end-- Hacer que el puente no sea transitablebridge.Transparency = 0.8bridge.CanCollide = falseendUna última cosa para restablecer el puente es cambiar el timerText a una cadena vacía como estaba originalmente. Luego, establece el booleano timerActive en false.
bridge.Transparency = 0.8bridge.CanCollide = falsetimerText.Text = ""timerActive = falseRealiza pruebas y verifica que el puente pueda usarse múltiples veces.
Script completo del puente temporizado
local bridge = script.Parent
-- Obtiene el botón tal como se escribe en el Explorador
local button = workspace.ButtonBridge
-- Obtiene la parte para la visualización
local timerPart = workspace.TimerDisplay
-- Obtiene el texto que mostrará el temporizador
local timerText = timerPart.SurfaceGui.TextLabel
-- Cuánto tiempo tienen los jugadores para cruzar el puente
local timerDuration = 5
local timerActive = false
local function startTimer()
print("Cuenta regresiva comenzada")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- Bucle for que cuenta hacia atrás desde timerDuration
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- Hacer que el puente no sea transitable
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)
Resumen
Los bucles se pueden combinar con diferentes medios de interacción para crear momentos de juego divertidos. En este tutorial, se crea un puente temporizado utilizando un bucle for que funciona como una cuenta regresiva. Durante la cuenta regresiva, se da a los jugadores un tiempo limitado para cruzar.