Práctica de bucles - crea un puente temporizado

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Este proyecto es otro ejemplo de cómo usar 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.

Configura el proyecto

Este puente se puede incluir en cualquier proyecto de Roblox con desafíos basados en movimiento, como un obby.

Crea las partes

  1. Encuentra un lugar para construir un puente, como un río o un gran hueco en un obby. Crea tres partes ancladas como las siguientes.

    • TimerDisplay
    • Bridge
    • ButtonBridge
  2. Cuando esté inactivo, el puente será semitransparente. Para hacerlo, selecciona el Bridge y cambia sus propiedades.

    • Transparency = 0.8
    • CanCollide = False

Crea la pantalla 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. Surface GUIs también se pueden usar para crear señales en el juego, barras de salud personalizadas y sistemas de inventario. Este tutorial lo explicará rápidamente, pero se puede encontrar más información en la sección de Tutoriales.

  1. Selecciona TimerDisplay y añade un SurfaceGui. Luego, como hijo del Surface Gui, añade un TextLabel.

  2. Selecciona el Surface GUI. En las Propiedades, realiza los siguientes cambios:

    • Cambia la Face para que puedas ver la etiqueta de texto en la parte frontal del temporizador donde el jugador está mirando.
  3. Selecciona el TextLabel. En las Propiedades, realiza los siguientes cambios:

    • Establece Size a {1, 0},{1, 0}.
    • Establece TextScaled a true.
    • Establece Text para que esté en blanco. El texto se actualizará utilizando el script.

Configura el script

Ahora que el temporizador está en su lugar, crea un script para controlar el puente y mostrar el número de cuenta regresiva a los jugadores.

  1. En la parte Bridge, añade un nuevo script llamado TimedBridge. En ese script, crea las siguientes variables.

    local bridge = script.Parent
    local button = workspace.ButtonBridge
    local timerText = workspace.TimerDisplay.SurfaceGui.TextLabel
    -- Cuánto tiempo permanecerá sólido el puente
    local timerDuration = 5

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

  1. 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 = 5
    local function startTimer()
    print("Cuenta regresiva iniciada")
    end
  2. Programa una función llamada buttonPressed() para verificar 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 iniciada")
    end
    local function buttonPressed(partTouched)
    local character = partTouched.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    end
    end
  3. Para iniciar el temporizador, en la declaración if, llama a la función startTimer().

    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
  4. Al final de buttonPressed(), conecta la función buttonPressed() al evento Touched del botón.

    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
    button.Touched:Connect(buttonPressed)
  5. 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 esperaba, intenta una de las siguientes soluciones.

Problema: Mensaje de error que dice: "... no es un miembro válido de workspace".

  • En el script TimedBridge, verifica que todas las partes estén escritas exactamente como se ven en el Explorador.

Problema: No se pueden ver las partes.

  • Asegúrate de que las tres partes estén ancladas.
  • Verifica la propiedad de Transparencia para el puente.

Crea 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á intransitable, haciendo que cualquiera que no sea lo suficientemente rápido caiga.

Haz que el puente sea transitable

Para comenzar, el script necesitará hacer que el puente sea sólido, o colisionable y luego iniciar un temporizador hasta que se vuelva intransitable.

  1. 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()
    -- Haz que el puente sea visible y transitable
    bridge.Transparency = 0
    bridge.CanCollide = true
    end
  2. Para 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()
    -- Haz que el puente sea visible y transitable
    bridge.Transparency = 0
    bridge.CanCollide = true
    for count = timerDuration, 0, -1 do
    end
    end
  3. Para mostrar el temporizador a los jugadores, cambia el texto en timerText para mostrar el conteo escribiendo timerText.Text = count. Cada vez que el bucle for pase por una iteración, mostrará a los jugadores el siguiente número en el temporizador.

    for count = timerDuration, 0, -1 do
    timerText.Text = count
    end
  4. Usa una función task.wait para hacer que el bucle for se ejecute solo una vez por segundo.

    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
  5. Ejecuta el juego. Cuando toques el botón, el puente debería aparecer y el temporizador comenzará, luego completará.

Evita que el puente se reinicie

Sin embargo, 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 está llamando 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 controlará si startTimer() puede ser llamado nuevamente.

Los booleanos se escriben de la misma manera que otras variables, pero en lugar de usar números o cadenas, solo pueden establecerse en verdadero o falso. En esta situación, el script utilizará un booleano para verificar si el temporizador está actualmente en funcionamiento antes de iniciarlo.

  1. En la parte superior de tu script, debajo de tus variables, crea una variable llamada timerActive y establece su valor en false ya que nadie ha presionado el botón aún.

    local timerDuration = 5
    local timerActive = false
    local function startTimer()
  2. 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.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and timerActive == false then
    startTimer()
    end
    end
  3. Para evitar que startTimer() se ejecute nuevamente antes de que el temporizador se agote, establece el booleano timerActive en verdadero.

    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
  4. En 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 = 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
    -- Haz que el puente no sea transitable
    bridge.Transparency = 0.8
    bridge.CanCollide = false
    end
  5. Una última cosa para restablecer el puente es cambiar el timerText a una cadena vacía como estaba originalmente. Luego, establece el booleano timerActive en falso.

    bridge.Transparency = 0.8
    bridge.CanCollide = false
    timerText.Text = ""
    timerActive = false
  6. Prueba el juego y verifica que el puente se pueda usar múltiples veces.

Script completo del puente temporizado

local bridge = script.Parent
-- Obtiene el botón tal como está escrito en el Explorador
local button = workspace.ButtonBridge
-- Obtiene la parte para la pantalla
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 iniciada")
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
-- Haz 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.

©2026 Roblox Corporation. Roblox, el logotipo de Roblox y "Powering Imagination" son algunas de nuestras marcas registradas y no registradas en los Estados Unidos y otros países.