Le strutture di controllo possono avere più di una condizione. I valori chiave else e elseif possono creare scenari aggiuntivi per ciò che dovrebbe accadere in base a diverse condizioni. La sintassi sembra come segue:
Mostra la sintassi per IF 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 giocatori ricevono premi a seconda del loro tempo di completamento.
Codice più condizioni
Per questo progetto, potresti scrivere una dichiarazione unica per ciascun medagliare da assegnare ai giocatori, ma ciò richiede molto tempo. Prendi, ad esempio, il codice immaginario qui sotto.
Tutte le dichiarazioni if
if finishTime < 5 then-- Ottieni una medaglia d'oroendif finishTime >= 5 and <= 10 then-- Ottieni un medaglio d'argentoendif finishTime > 10 and <= 15 then-- Ottieni un medaglio di bronzoend
Un modo più leggibile e efficiente per codificare questo è utilizzare una sola dichiarazione if e utilizzare il concetto chiave elseif per fornire condizioni alternative per testare se le condizioni precedenti non sono vere.
Usaelseif e altro
if finishTime < 5 then-- Ottieni una medaglia d'oroelseif finishTime >= 5 and <= 10 then-- Ottieni un medaglio d'argentoelseif finishTime > 10 and <= 15 then-- Ottieni un medaglio di bronzoend
Quando la frase if/then viene eseguita, inizierà dalla parte superiore e eseguirà solo il codice per la prima condizione vera trovata.
Impostazione del percorso gara
Inizia posizionando il punto di partenza del corso e la linea di arrivo, e poi crea uno script per impostare il giocatore e assegnare differenti medaglie.
Crea una parte ancorata chiamata FinishLine. Per rendere il test più veloce, posiziona l'avvio e la fine vicino l'un l'altro. Puoi spostare la linea di avvio dopo aver finito lo script.
In FinishLine, inserisci uno script chiamato RaceManager. Quindi, aggiungi una variabile per memorizzare quanti secondi sono passati dal l'inizio della gara e una variabile per il riferimento di FinishLine.
local finishLine = script.Parentlocal timePassed = 0Crea una funzione chiamata finish() .
local timePassed = 0local finishLine = script.Parentlocal function finish()endSu tua propria Proprio:
- Codice una funzione chiamata partTouched() che viene eseguita 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)Provalo e controlla che finish() venga chiamato quando tocchi la linea di destinazione.
Mantieni finito() dalla ripetizione
In questo momento, ogni volta che un giocatore tocca la linea di destinazione, finish() viene chiamato continuamente finché il giocatore tocca la parte.
Usa un Booleano , una variabile che memorizza vero o falso, per assicurarti che finisca() venga chiamato solo una volta.
Crea una nuova variabile chiamata raceActive e impostala su true .
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- Esegue ogni volta che il giocatore tocca la parte della linea d'arrivolocal function finish()Aggiungi una seconda condizione all'if statement 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 a finish() di essere chiamato di nuovo, imposta raceActive su false .
local function finish()print("touched the finish line")raceActive = falseendProva il tuo gioco per assicurarti di vedere una sola volta la tua dichiarazione di stampa di prova.
Tenere traccia del tempo
Come un if statement, a while loop può anche utilizzare una condizione per vedere se dovrebbe essere Eseguire. Per sincronizzare il Giocatore, crea un timer utilizzando un while true do loop che viene eseguito solo quando il raceActive pulsante vero è vero.
Nella parte inferiore dello script, scrivi while raceActive == true do . Premi Inserisci per completare automaticamente e aggiungere il end .
finishLine.Touched:Connect(partTouched)while raceActive == true doendPer sincronizzare i giocatori, nel loop, aggiungi 1 alla variabile timePassed una volta 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 e assicurati di vedere ogni secondo visualizzato nella finestra di uscita.
Assegnazione di medaglie
Per finire, usa un if con più condizioni per assegnare ai giocatori un premio medagliato in base alle loro Prestazione. Usa un if e due frasi else per controllare il tempo di completamento della Giocatoree assegnare loro la medaglia corrispondente.
Per confermare 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, inserisci un if che confronta timePassed con il tempo di destinazione desiderato. Questo esempio controlla se il tempo del Giocatoreè 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.
Aggiungere condizioni aggiuntive
Ora che hai testato per la medaglia d'oro, condizioni di codice per le altre medaglie utilizzando la parola chiave elseif .
Per la medaglia d'argento, usa elseif -number1 e la prossima gamma di tempo desiderata. In questo esempio, la gamma è 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.
Risolvere i problemi
Se non vedi i metalli d'argento e di bronzo, prova uno dei seguenti.
- Ogni elseif dovrebbe avere un then dopo la sua condizione.
- In partTouched() , assicurati che la seconda condizione della if statement uses == , come in raceActive == true .
- Controlla che ogni elseif sia in range. Ogni GF! condizione deve essere tra la prima riga della frase if/then e la sua ultima riga Terminare .
Aggiungere la condizione Else
Se il giocatore non ha guadagnato nessuna delle medaglie, dovresti incoraggiarlo a provare di nuovo. In questo caso, puoi usare una dichiarazione else, che viene eseguita se non ci sono altre condizioni, per mostrargli un Messaggio.
Sotto l'ultimo elseif e sopra l'ultimo end, inizia una nuova riga e digita else . 1> Non aggiungere1> quindi. Sotto l'altro, usa una dichiarazione di stampa per invitare loro a 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. Provalo a giocare per vedere il prossimo Messaggio.
Panoramica
Le strutture di controllo possono avere più di un solo scenario. Usa se le dichiarazioni per impostare la dichiarazione iniziale per Controllare /Verificare, quindi aggiungi il maggior numero possibile di elseif condizioni come necessario. Infine, usa else per dichiarare ciò che dovrebbe succedere se tutte le condizioni fornite sono false.
A partire dalla parte superiore, tutte le condizioni saranno controllate e solo la prima condizione vera verrà eseguita. Le altre condizioni non saranno controllate e i loro codicenon saranno Eseguire.
Dopo aver finito il progetto, puoi espandere lo script per aggiungere nuovi elementi in alcuni modi extra.
- Aggiungi il codice in modo che i giocatori possano ripetere la gara toccando la linea di partenza quando finiscono.
- Progetta un modo per visualizzare il tempo durante una gara. Puoi mostrare il tempo su una parte utilizzando una GUI or Intefaccia grafica utentedi superficie, come nella Creazione di un ponte temporale tutorial .
Completed script
local timePassed = 0
local finishLine = script.Parent
-- Utilizzato per mantenere finito() e timer da ripetere quando la gara è finita
local raceActive = true
-- Si esegue quando il giocatore tocca la linea di destinazione e mostra loro 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
-- Controlla 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)
-- Tiene traccia del tempo di gara mentre la gara è attiva. Deve essere in fondo dello script.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end