Più di una condizione

*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. 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 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 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'oro
end
if finishTime >= 5 and <= 10 then
-- Ottieni un medaglio d'argento
end
if finishTime > 10 and <= 15 then
-- Ottieni un medaglio di bronzo
end

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'oro
elseif finishTime >= 5 and <= 10 then
-- Ottieni un medaglio d'argento
elseif finishTime > 10 and <= 15 then
-- Ottieni un medaglio di bronzo
end

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.

  1. 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.

    Finisci parte
    Corso intero
  2. 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.Parent
    local timePassed = 0
  3. Crea una funzione chiamata finish() .


    local timePassed = 0
    local finishLine = script.Parent
    local function finish()
    end
  4. Su 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")
    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. 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.

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


    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- Esegue ogni volta che il giocatore tocca la parte della linea d'arrivo
    local function finish()
  2. Aggiungi una seconda condizione all'if statement 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 a finish() di essere chiamato di nuovo, imposta raceActive su false .


    local function finish()
    print("touched the finish line")
    raceActive = false
    end
  4. Prova 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.

  1. 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 do
    end
  2. Per 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 do
    task.wait(1)
    timePassed += 1
    print(timePassed)
    end
  3. Gioca 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.

  1. Per confermare 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, 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 = 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.

Aggiungere condizioni aggiuntive

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

  1. 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 = 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.

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.

  1. 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 = 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. 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