Condizioni multiple

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Le strutture di controllo possono avere più di una condizione.Le parole chiave else e elseif possono creare scenari aggiuntivi per ciò che dovrebbe accadere in più condizioni.La sintassi sembra:

Mostra la sintassi per elseif e else

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

In questo progetto, else e elseif vengono utilizzati per codificare un corso di parkour in cui i corridori ricevono premi a seconda del loro tempo di arrivo.

Codifica più condizioni

Per questo progetto, potresti scrivere una dichiarazione if unica per ogni medaglia per assegnare ai giocatori, ma ciò richiede molto tempo.Prendi, per esempio, il codice immaginario qui sotto.

Tutte le dichiarazioni if

if finishTime < 5 then
-- Ottieni una medaglia d'oro
end
if finishTime >= 5 and <= 10 then
-- Prendi una medaglia d'argento
end
if finishTime > 10 and <= 15 then
-- Ottieni una medaglia di bronzo
end

Un modo più leggibile ed efficiente per codificare questo è quello di utilizzare una singola dichiarazione if e utilizzare la parola chiave elseif per fornire condizioni alternative per testare se le condizioni precedenti non sono vere.

Usa elseif e else

if finishTime < 5 then
-- Ottieni una medaglia d'oro
elseif finishTime >= 5 and <= 10 then
-- Prendi una medaglia d'argento
elseif finishTime > 10 and <= 15 then
-- Ottieni una medaglia di bronzo
end

Quando viene eseguita la dichiarazione if/then, inizierà in cima e eseguirà solo il codice per la prima condizione vera che trova.

Configura il percorso della gara

Inizia posizionando il punto di partenza e la linea d'arrivo del corso e poi crea uno script per sincronizzare il giocatore e assegnare diverse medaglie.

  1. Crea una parte ancorata con il nome FinishLine.Per rendere i test più veloci, posiziona l'inizio e la fine vicine.Puoi spostare la linea d'arrivo dopo aver terminato lo script.

    Finitura della parte
    >

    Corso completo
    >

  2. In FinishLine, inserisci uno script chiamato RaceManager.Quindi, aggiungi una variabile per memorizzare quanti secondi sono passati dall'inizio della gara e una seconda variabile per fare riferimento a FinishLine.


    local finishLine = script.Parent
    local timePassed = 0
  3. Crea una funzione chiamata finish() .


    local timePassed = 0
    local finishLine = script.Parent
    local function finish()
    end
  4. Da Proprio:

    • Codifica una funzione chiamata partTouched() che esegue finish() quando un giocatore la tocca.
    • Connetti la parte della linea di arrivo a partTouched().
    • Confronta il tuo codice con l'esempio seguente.

    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. Prova e controlla che finish() venga chiamato quando tocchi la linea d'arrivo.

Evita che finish() si ripeta

Al momento, ogni volta che un giocatore tocca la linea d'arrivo, finish() viene chiamato continuamente finché il giocatore tocca la parte.

Usa un boolene , una variabile che memorizza vero o falso, per garantire che finish() venga chiamata solo una volta.

  1. Crea una nuova variabile chiamata raceActive e impostala su true .


    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- Viene eseguito ogni volta che il giocatore tocca la parte della linea d'arrivo
    local function finish()
  2. Aggiungi una seconda condizione alla dichiarazione if per controllare se raceActive è vero prima di chiamare finish() .


    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and raceActive == true then
    finish()
    end
    end
  3. Per impedire che finish() venga nuovamente chiamato, imposta raceActive a false .


    local function finish()
    print("touched the finish line")
    raceActive = false
    end
  4. Prova il tuo gioco per controllare che vedi solo una volta la tua dichiarazione di stampa di test.

Traccia il tempo

Come una dichiarazione if, anche un ciclo while può utilizzare una condizione per vedere se deve essere Eseguire.Per sincronizzare il Giocatore, crea un timer utilizzando un ciclo while true che funziona solo quando il raceActive boolean è vero.

  1. Nella parte inferiore dello script, digita while raceActive == true do . Premi Invio per completare automaticamente e aggiungere il end .


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    end
  2. Per sincronizzare i giocatori, nel ciclo, aggiungi 1 alla variabile timePassed ogni secondo. Includi una dichiarazione di stampa per testare il tuo lavoro.


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    task.wait(1)
    timePassed += 1
    print(timePassed)
    end
  3. Gioca al gioco e controlla che vedi ogni secondo visualizzato nella finestra di output.

Medaglie del giocatore premio

Per terminare, usa una dichiarazione if con più condizioni per assegnare ai giocatori una medaglia premio diversa in base alle loro Prestazione.Usa una dichiarazione if e due dichiarazioni elseif per controllare il tempo di fine del Giocatoree assegnargli la medaglia corretta.

  1. Per confermare che ogni medaglia può essere assegnata, usa le dichiarazioni di stampa.


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    end
  2. Per assegnare una medaglia d'oro, codifica una dichiarazione if che confronta timePassed con il tempo di finitura desiderato.Questo esempio controlla se il tempo del Giocatoreera inferiore o uguale a 10 secondi.


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    end
    end
  3. Prova e conferma che la medaglia d'oro può essere assegnata.

Aggiungi condizioni supplementari

Ora che hai testato per la medaglia d'oro, imposta le condizioni del codice per le altre medaglie usando la parola chiave elseif.

  1. Per la medaglia d'argento, usa elseif e la prossima intervista temporale desiderata.In questo esempio, l'intervallo è maggiore di 10 secondi ma inferiore o uguale a 20 secondi.


    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 lo stesso modello per la medaglia di bronzo. Controlla il tuo codice con l'esempio seguente.


    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. Playtest per le medaglie d'argento e di bronzo.

Suggerimenti per la risoluzione dei problemi

Se non vedi apparire i metalli argento e bronzo, prova uno dei seguenti.

  • Ogni elseif dovrebbe avere poi dopo la sua condizione.
  • In partTouched() , assicurati che la seconda condizione della dichiarazione if utilizzi == , come in raceActive == true .
  • Controlla che ciascuno elseif è in scala. Ogni elseif condizione deve essere tra la prima linea della dichiarazione if/then e la sua ultima end .

Aggiungi la condizione else

Se il giocatore non ha guadagnato nessuna delle medaglie, dovresti incoraggiarlo a riprovarci.In questo caso, puoi usare una dichiarazione else , che viene eseguita se nessun'altra condizione è vera, per mostrargli un Messaggio.

  1. Sotto l'ultima elseif e sopra end, avvia una nuova linea e digita else . Non aggiungere poi.Sotto altro, usa una dichiarazione di stampa per richiedere loro di riprovare.


    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 . Playtest per vedere il Messaggioelse.

Sommariamente

Le strutture di controllo possono avere più di un solo scenario.Usa le dichiarazioni if per configurare la dichiarazione iniziale da Controllare /Verificaree quindi aggiungi le condizioni elseif necessarie.Infine, usa else per dichiarare ciò che dovrebbe accadere se tutte le condizioni date sono false.

A partire dalla parte superiore, tutte le condizioni saranno controllate e solo la prima vera condizione eseguirà il codice.Le condizioni rimanenti non verranno controllate, né verrà Eseguireil loro codice.

Dopo aver completato il progetto, puoi espandere lo script per aggiungere nuovi elementi in un paio di modi extra.

  • Aggiungi codice così i giocatori possono ripetere la gara toccando la linea di partenza quando finiscono.
  • Progetta un modo per visualizzare il tempo durante una gara.Puoi visualizzare l'ora su una parte utilizzando un'GUI or Intefaccia grafica utenteSurface, come nel tutorial Creare un ponte temporale.
Completed script

local timePassed = 0
local finishLine = script.Parent
-- Utilizzato per mantenere finish() e timer da ripetere quando la gara è finita
local raceActive = true
-- Esegue quando il giocatore tocca il traguardo e gli mostra 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
-- Verifica se un giocatore tocca la parte quando una gara è attiva
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)
-- Traccia il tempo di gara mentre la gara è attiva. Deve essere alla fine dello script.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end