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 debería suceder bajo varias condiciones. La sintaxis se ve así:

Muestra la sintaxis para else y para otros

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 recompensas dependiendo de su tiempo de finalización.

Código de múltiples condiciones

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

Todas las declaraciones

if finishTime < 5 then
-- Obtén una medalla de oro
end
if finishTime >= 5 and <= 10 then
-- Consigue una medalla de plata
end
if finishTime > 10 and <= 15 then
-- Obtén una medalla de bronce
end

Una manera más fácil 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.

Usaboth y else

if finishTime < 5 then
-- Obtén una medalla de oro
elseif finishTime >= 5 and <= 10 then
-- Consigue una medalla de plata
elseif finishTime > 10 and <= 15 then
-- Obtén una medalla de bronce
end

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

Configurando la carrera

Comienza colocando el punto de inicio del recorrido y la línea de meta, y luego crea un script para tiempo el jugador y otorgar diferentes medallas.

  1. Crea una parte anclada llamada FinishLine. Para hacer que la prueba sea más rápida, coloca la línea de inicio y final cerca uno del otro. Puedes mover la línea de meta después de terminar el script.

    Terminar Parte
    Todo el recorrido
  2. En FinishLine, introduce un script llamado RaceManager. Luego, agrégala una variable para almacenar la cantidad de segundos desde que comenzó la carrera y una segunda variable para referirse 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. En tu en posesión:

    • Código 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() .
    • Compare su 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. Pruebe y asegúrese de que finish() se llame cuando toque la línea de meta.

Evita que finalice() de repetición

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

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

  1. Crea una nueva variable llamada raceActive y establece que true .


    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- Se ejecuta cuando 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 cierto 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 de nuevo, establece raceActive en false.


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

Mantener el seguimiento del tiempo

Al igual que una declaración if, un while loop también puede usar una condición para ver si debe ejecutarse. Para tiempo el jugador, crea un temporizador usando un while true doLoop que solo se ejecuta cuando el raceActiveBooleano es cierto.

  1. En la parte inferior del script, escribe while raceActive == true do . Presiona Enter para auto-completar 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 el juego y asegúrate de que veas cada segundo que se muestra en la Ventana de Salida.

Otorgando Medallas a los Jugadores

Para terminar, usa una declaración de if con múltiples condiciones para recompensar a los jugadores con una medalla diferente en función de su ejecución. Usa una declaración de if y dos declaraciones de else para comprobar el tiempo de terminación del jugador y otorgarles la medalla correcta.

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


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    end
  2. Para otorgar una medalla de oro, códiga una declaración if que compara timePassed con el tiempo de finalización deseado. Este ejemplo verifica si el tiempo del jugador era menor 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. Probar y confirmar que la medalla de oro se puede otorgar.

Añadir condiciones adicionales

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

  1. Para la medalla de plata, usa elseif y el siguiente rango deseado. En este ejemplo, el rango es mayor a 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 los metales plateados y bronce, prueba uno de los siguientes.

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

Agregar la condición de 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 de else, que se ejecuta si no hay otras condiciones no que sean ciertas, para mostrarles un mensaje.

  1. Debajo de la última elseif streng y por encima end finalizar , comienza una nueva línea y escribe else . 2> No agregues entonces. Debajo de esto, usa una declaración de impresión para solicitarlos que intente 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. Pruebe el juego para ver el otro mensaje.

Resumen

Las estructuras de control pueden tener más de un escenario. Usa si las declaraciones para configurar la declaración inicial para verificar, comprobar, y luego agrega tantas condiciones de elseif como sea necesario. Finalmente, usa else para declarar lo que debe suceder si todas las condiciones dadas son falsas.

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

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

  • Añade código para que los jugadores puedan repetir la carrera al tocar la línea de salida cuando terminen.
  • Diseña una manera 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 de creación de un puente cronometrado.
Completed script

local timePassed = 0
local finishLine = script.Parent
-- Se usa para evitar que terminación() y temporizador se repitan cuando la carrera termina
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)
-- Mantiene el 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