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
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
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
Seleccione TimerDisplay y agregue un Etiqueta de superficie . Luego, añadiendo a la superficie Gui, agregue un TextLabel .
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.
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.
En la parte del puente, agregue 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 el puente se mantendrá sólidolocal 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.
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("Countdown started")endCó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")endlocal function buttonPressed(partTouched)local character = partTouched.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenendendPara iniciar el temporizador, en la declaración if, llama la función startTimer() .
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendBajo el final de buttonPressed(), conecta la función buttonPressed() a el evento Touched del botón.
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbutton.Touched:Connect(buttonPressed)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.
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 caminarbridge.Transparency = 0bridge.CanCollide = trueendPara 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 caminarbridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendendPara 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 dotimerText.Text = countendUsa 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 dotimerText.Text = counttask.wait(1)endCorre 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.
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 = 5local timerActive = falselocal function startTimer()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.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and timerActive == false thenstartTimer()endendPara 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 = truebridge.Transparency = 0bridge.CanCollide = trueEn 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 = truebridge.Transparency = 0bridge.CanCollide = true-- Para la repetición que cuenta regresiva desde timerDurationfor count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end-- Haz que el puente no sea caminablebridge.Transparency = 0.8bridge.CanCollide = falseendUna ú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.8bridge.CanCollide = falsetimerText.Text = ""timerActive = falsePrueba 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.