Múltiples condiciones

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

Las estructuras de control pueden tener más de una condición.Las palabras clave else y elseif pueden crear escenarios adicionales para lo que debe suceder bajo varias condiciones.La sintaxis se parece a:

Muestra la sintaxis para elseif y else

if isGreen then
print("Go")
elseif isYellow then
print("Slow")
elseif isPedestrians then
print("Wait")
else
print("stop")
end

En este proyecto, else y elseif se utilizan para codificar un curso de parkour donde los corredores reciben premios dependiendo de su tiempo de finalización.

Código de múltiples condiciones

Para este proyecto, podrías escribir una declaración if única para cada medalla para otorgar a los jugadores, pero eso requiere mucho tiempo.Toma, por instancia, el código imaginario a continuación.

Todas las declaraciones if

if finishTime < 5 then
-- Obtener una medalla de oro
end
if finishTime >= 5 and <= 10 then
-- Obtener una medalla de plata
end
if finishTime > 10 and <= 15 then
-- Obtener una medalla de bronce
end

Una forma más legible y eficiente de codificar esto es usar una sola declaración if y usar la palabra clave elseif para proporcionar condiciones alternativas para probar si las condiciones anteriores no son ciertas.

Usa elseif y else

if finishTime < 5 then
-- Obtener una medalla de oro
elseif finishTime >= 5 and <= 10 then
-- Obtener una medalla de plata
elseif finishTime > 10 and <= 15 then
-- Obtener una medalla de bronce
end

Cuando se ejecute la declaración if/then, comenzará en la parte superior y solo ejecutará el código para la primera condición verdadera que encuentre .

Configurar la pista de carrera

Empieza colocando el punto de partida y la línea de meta del curso, y luego crea un script para sincronizar al jugador y otorgar diferentes medallas.

  1. Crea una parte anclada llamada FinishLine.Para hacer las pruebas más rápidas, coloca el comienzo y el final cerca uno del otro.Puedes mover la línea de meta después de terminar el script.

    Terminar parte

    Todo el curso
    >

  2. En FinishLine, insira un script llamado RaceManager.Luego, agrega una variable para almacenar cuántos segundos han pasado desde que comenzó la carrera y una segunda variable para referenciar a FinishLine.


    local finishLine = script.Parent
    local timePassed = 0
  3. Crea una función llamada finish() .


    local timePassed = 0
    local finishLine = script.Parent
    local function finish()
    end
  4. Por tu en posesión:

    • Codifica una función llamada partTouched() que se ejecuta finish() cuando un jugador la toca.
    • Conecta la parte de la línea de meta a partTouched().
    • Compara tu código con el ejemplo a continuación.

    local function finish()
    print("touched the finish line")
    end
    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    finish()
    end
    end
    finishLine.Touched:Connect(partTouched)
  5. Prueba y comprueba que finish() se llame cuando toques la línea de meta.

Mantener finish() de repetirse

En este momento, cada vez que un jugador toca la línea de meta, finish() se llama continuamente mientras el jugador toque la parte.

Usa un booleano , una variable que almacena verdadero o falso, para asegurarte de que finish() solo se llame una vez.

  1. Crea una nueva variable llamada raceActive y ponla en true.


    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- Se ejecuta cada vez que el jugador toca la parte de la línea de meta
    local function finish()
  2. Añade una segunda condición a la declaración if para comprobar si raceActive es verdadero antes de llamar finish() .


    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and raceActive == true then
    finish()
    end
    end
  3. Para evitar que finish() se llame nuevamente, establece raceActive a false.


    local function finish()
    print("touched the finish line")
    raceActive = false
    end
  4. Prueba tu juego para comprobar que solo ves tu declaración de impresión de prueba una vez.

Realizar un seguimiento del tiempo

Al igual que una declaración if, un bucle while también puede usar una condición para ver si debe ejecutarse.Para sincronizar al jugador, crea un temporizador usando un bucle while true que solo se ejecuta cuando el raceActive boolean es verdadero.

  1. Al final del script, escriba while raceActive == true do. Presione Entrar para completar automáticamente y agregar el end .


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    end
  2. Para sincronizar a los jugadores, en el bucle, agregue 1 a la variable timePassed una vez cada segundo. Incluya una declaración de impresión para probar su trabajo.


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    task.wait(1)
    timePassed += 1
    print(timePassed)
    end
  3. Juega al juego y comprueba que cada segundo se muestre en la ventana de salida.

Medallas de jugador de premio

Para terminar, utilice una declaración if con múltiples condiciones para otorgar a los jugadores una medalla de premio diferente en función de su ejecución.Usa una declaración if y dos declaraciones elseif para verificar el tiempo de finalización del jugador y otorgarle la medalla correcta.

  1. Para confirmar que cada medalla se puede otorgar, utilice declaraciones de impresión.


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    end
  2. Para otorgar una medalla de oro, codifica una declaración if que compara timePassed con el tiempo de finalización deseado.Este ejemplo comprueba si el tiempo del jugador fue inferior o igual a 10 segundos.


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    end
    end
  3. Prueba y confirma que se puede otorgar la medalla de oro.

Añadir condiciones adicionales

Ahora que has probado por la medalla de oro, establece las condiciones de código para las otras medallas usando la palabra clave elseif.

  1. Para la medalla de plata, utilice elseif y el siguiente rango de tiempo deseado.En este ejemplo, el rango es mayor que 10 segundos pero menor o igual a 20 segundos.


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("You get a silver medal!")
    end
    end
  2. Usa el mismo patrón para la medalla de bronce. Comprueba tu código con el ejemplo a continuación.


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("You get a silver medal!")
    elseif timePassed > 20 and timePassed <= 30 then
    print("You get a bronze medal!")
    end
    end
  3. Prueba de juego para las medallas de plata y bronce.

Consejos de solución de problemas

Si no ves que aparezcan los metales plateados y de bronce, prueba uno de los siguientes.

  • Cada elseif debe tener un entonces después de su condición.
  • En partTouched() , asegúrate de que la segunda condición de la declaración if use == , como en raceActive == true .
  • Asegúrate de que cada elseif esté en alcance. Cada condición elseif debe estar entre la primera línea de la declaración if/then y su última end .

Añade la condición else

Si el jugador no ganó ninguna de las medallas, deberías animarlo a intentarlo de nuevo.En este caso, puedes usar una declaración else, que se ejecuta si no hay otras condiciones verdaderas, para mostrarles un mensaje.

  1. Debajo de la última elseif y por encima de end, comienza una nueva línea y escribe else . No agregue entonces .Debajo de todo, utilice una declaración de impresión para solicitarles que prueben de nuevo.


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("You get a silver medal!")
    elseif timePassed > 20 and timePassed <= 30 then
    print("You get a bronze medal!")
    else
    print("Try again!")
    end
    end

2. Prueba para ver el mensaje de lo demás.

Resumen

Las estructuras de control pueden tener más de un escenario.Usa declaraciones if para configurar la declaración inicial para verificar, comprobar, y luego añade tantas condiciones elseif como sea necesario.Por último, utilice else para indicar lo que debe suceder si todas las condiciones dadas son falsas.

Comenzando en la parte superior, todas las condiciones se revisarán y solo la primera condición verdadera ejecutará el código.Las condiciones restantes no se revisarán, ni se ejecutará su código.

Una vez terminado el proyecto, puedes expandir el script para agregar nuevos elementos de algunas maneras adicionales.

  • Añade código para que los jugadores puedan repetir la carrera tocando la línea de salida cuando terminen.
  • Diseña una forma de mostrar el tiempo durante una carrera.Puedes mostrar el tiempo en una parte usando una interfaz de usuario de superficie, como en el tutorial Crear un puente temporalizado.
Completed script

local timePassed = 0
local finishLine = script.Parent
-- Se usa para mantener a finish() y timer de repetirse cuando termina la carrera
local raceActive = true
-- Se ejecuta cuando el jugador toca la línea de meta y les muestra un premio
local function finish()
raceActive = false
print("You finished in " .. timePassed)
if timePassed <= 10 then
print("You get a gold medal!")
elseif timePassed > 10 and timePassed <= 20 then
print("You get a silver medal!")
elseif timePassed > 20 and timePassed <= 30 then
print("You get a bronze medal!")
else
print("Try again!")
end
end
-- Comprueba si un jugador toca la parte cuando una carrera está activa
local function partTouched(otherPart)
local character = otherPart.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid and raceActive == true then
finish()
end
end
finishLine.Touched:Connect(partTouched)
-- Realiza un seguimiento del tiempo de carrera mientras la carrera está activa. Necesita estar en la parte inferior del script.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end