Práctica de Loops - Creando un puente cronometrado

*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 usar para los bucles de una manera práctica. Para este puente, los jugadores tocarán un botón para hacer que un puente sea caminable por un tiempo limitado antes de desaparecer. Para crear un temporizador y mostrar el tiempo restante a un jugador, usarás para los bucles.

Configurando el Proyecto

Este puente se puede incluir en cualquier proyecto de juego con desafíos basados ​​en movimiento, como un obby/ carrera de obstaculos.

Creando Partes

  1. Encuentra un lugar para construir un puente, como un río o un gran espacio en un obby/ carrera de obstaculos. Crea tres partes ancoradas como las siguientes.

    • Mostrador de Temporizador
    • Puente
    • Puente de botón
  2. Cuando no esté activo, el puente será semi-transparente. Para hacerlo, seleccione el Puente y cambie sus propiedades.

    • Transparencia = 0.8
    • Puede colisionar = Falso

Creando la pantalla del temporizador

Cuando cruces el puente, los jugadores necesitarán ver cuántos segundos restan antes de que el puente desaparezca. Una manera de mostrar imágenes o texto es agregando un objeto llamado a GUI de superficie a una parte. GUI de superficie también se puede usar para crear señales, barras de salud personalizadas y sistemas de inventario. Este tutorial se llevará a cabo rápidamente, pero se puede encontrar más

  1. Seleccione TimerDisplay y agregue un Etiqueta de superficie . Luego, añadiendo a la superficie Gui, agregue un TextLabel .

  2. Seleccione la Interfaz gráfica (o GUI)de la superficie. En las Propiedades, realice los siguientes cambios:

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

    • Establece Tamaño a {1, 0},{1, 0} .
    • Establece TextScaled a true.
    • Establece Texto para que sea blanco. El texto se actualizará con el script.

Configurando 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 del puente, agregue 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 el puente se mantendrá sólido
    local timerDuration = 5

Código de la Interacción Táctil

Para usar el puente, necesitarás crear dos funciones. Una función hará que el puente sea caminable y muestre 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("Countdown started")
    end
  2. Código una función llamada buttonPressed() para ver si un humanoide toca el botón. La función debe aceptar un parámetro de partTouched y luego tener una declaración vacía si se detecta un humanoide en esa parte.


    local function startTimer()
    print("Countdown started")
    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 la función startTimer() .


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
  4. Bajo el final de buttonPressed(), conecta la función buttonPressed() a el 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. Ejecutar el proyecto. Toca la parte y revisa la ventana 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, intente uno de los siguientes a continuación. Problema : mensaje de error diciendo: "... is not a valid member of workspace" .

  • En el script TimedBridge, asegúrese de que todas las partes se escriban exactamente como se ven en el Explorador. Problema. : No se ven las partes.

  • Asegúrese de que las tres partes estén ancladas.

  • Consulta la propiedad de transparencia para el puente.

Creando el Temporizador

Cuando los jugadores pisen el puente, startTimer() hará que el puente sea caminable y comience el temporizador. Una vez que el temporizador alcance 0, el puente se volverá un camino imposible, haciendo que cualquiera que no sea lo suficientemente rápido para caída.

Haciendo que el puente sea caminable

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

  1. Para hacer que el puente sea caminable, en startTimer(), cambia la propiedad de transparencia del puente a 0 (opaco) y la propiedad de colisión de verdad a true.


    local function startTimer()
    -- Haz que el puente sea visible y se pueda caminar
    bridge.Transparency = 0
    bridge.CanCollide = true
    end
  2. Para crear un temporizador que cuenta regresiva, crea un for de la siguiente manera con los siguientes valores.

    • Control Variable : nombre de count , establecido en timerDuration .
    • Fin : 0
    • Incremento : -1

    local function startTimer()
    -- Haz que el puente sea visible y se pueda caminar
    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 recuento escribiendo timerText.Text = count . Cada vez que el bucle de for se ejecuta, mostrará a los jugadores el siguiente número en el temporizador.


    for count = timerDuration, 0, -1 do
    timerText.Text = count
    end
  4. Usa la función task.wait para hacer que la forzada de módulo solo se ejecute una vez cada segundo.


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

Mantener el puente de reinicio

Sin embargo, si se mueve por el botón, el temporizador se reiniciará.

Esto se debe a que el for loop se está llamando cada vez que tocas el botón y estás iniciando el for loop desde el principio. Para mantener el temporizador de que no se reinicie constantemente, necesitarás agregar un valor de tipo de variable que controlará si o no se permite que startTimer() se llame de nuevo. Los booleos se escriben de la misma manera que otras variables, pero en lugar de usar números o cadenas, solo se pueden configurar para que sea verdadero o falso. En esta situación, el script usará un booleo para verificar si el temporizador está actualmente en ejecución antes de iniciarlo.

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


    local timerDuration = 5
    local timerActive = false
    local function startTimer()
  2. Para asegurarse de que el temporizador solo se inicia cuando el valor de timerActive es falso, agregue 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 de nuevo antes de que el temporizador se acabe, establece el valor de verdadero timerActive para true.


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
  4. En la función startTimer(), después de la for loop, restablece el puente a sus propiedades originales al cambiar la transparencia del puente a 0.8 y CanCollide a false.


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
    -- Para la repetición que cuenta regresiva desde timerDuration
    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
    -- Haz que el puente no sea caminable
    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 cuando se originó. Luego, establece el timerActiveBooleano a falso.


    bridge.Transparency = 0.8
    bridge.CanCollide = false
    timerText.Text = ""
    timerActive = false
  6. Prueba y asegúrate de que el puente se puede usar múltiples veces.

Completa el script del puente temporal


local bridge = script.Parent
-- Obtiene el botón como se escribe 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 los jugadores tienen que cruzar el puente
local timerDuration = 5
local timerActive = false
local function startTimer()
print("Countdown started")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- Para la repetición que cuenta regresiva desde timerDuration
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- Haz que el puente no sea caminable
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("part touched")
if humanoid and timerActive == false then
print("starting timer")
startTimer()
end
end
button.Touched:Connect(buttonPressed)

Resumen

Las repeticiones se pueden combinar con diferentes medios de interacción para crear momentos de juego divertidos. En este tutorial, se crea un puente cronometrado utilizando un for para proporcionar un tiempo de cuenta regresiva. Durante el tiempo de cuenta regresiva, los jugadores se dan un tiempo limitado para completar.