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

  1. 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
  2. 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.

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

  2. 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.
  3. 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.

  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

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.

  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 comenzada")
    end
  2. Codifica 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")
    end
    local function buttonPressed(partTouched)
    local character = partTouched.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    end
    end
  3. Para comenzar 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 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.

  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()
    -- Hacer 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()
    -- Hacer 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 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 do
    timerText.Text = count
    end
  4. Utiliza 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 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.

  1. 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 = 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 true.


    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
    -- Hacer 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 false.


    bridge.Transparency = 0.8
    bridge.CanCollide = false
    timerText.Text = ""
    timerActive = false
  6. Realiza 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.

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