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 thenprint("Go")elseif isYellow thenprint("Slow")elseif isPedestrians thenprint("Wait")elseprint("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'oroendif finishTime >= 5 and <= 10 then-- Prendi una medaglia d'argentoendif finishTime > 10 and <= 15 then-- Ottieni una medaglia di bronzoend
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'oroelseif finishTime >= 5 and <= 10 then-- Prendi una medaglia d'argentoelseif finishTime > 10 and <= 15 then-- Ottieni una medaglia di bronzoend
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.
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 >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.Parentlocal timePassed = 0Crea una funzione chiamata finish() .
local timePassed = 0local finishLine = script.Parentlocal function finish()endDa 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")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)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.
Crea una nuova variabile chiamata raceActive e impostala su true .
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- Viene eseguito ogni volta che il giocatore tocca la parte della linea d'arrivolocal function finish()Aggiungi una seconda condizione alla dichiarazione if per controllare se raceActive è vero prima di chiamare finish() .
local function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endendPer impedire che finish() venga nuovamente chiamato, imposta raceActive a false .
local function finish()print("touched the finish line")raceActive = falseendProva 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.
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 doendPer 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 dotask.wait(1)timePassed += 1print(timePassed)endGioca 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.
Per confermare che ogni medaglia può essere assegnata, usa le dichiarazioni di stampa.
local function finish()raceActive = falseprint("You finished in " .. timePassed)endPer 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 = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")endendProva 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.
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 = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")endendUsa lo stesso modello per la medaglia di bronzo. Controlla il tuo codice con l'esempio seguente.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("You get a bronze medal!")endendPlaytest 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.
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 = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("You get a bronze medal!")elseprint("Try again!")endend
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