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 ed elseif possono creare scenari aggiuntivi per cosa dovrebbe succedere sotto diverse condizioni. La sintassi è simile a questa:

Mostra la sintassi per elseif ed else

if isGreen then
print("Vai")
elseif isYellow then
print("Lento")
elseif isPedestrians then
print("Aspetta")
else
print("fermati")
end

In questo progetto, else ed elseif vengono utilizzati per programmare un percorso di parkour dove i corridori ricevono premi a seconda del loro tempo di completamento.

Codifica di più condizioni

Per questo progetto, potresti scrivere un'unica istruzione if per ciascuna medaglia da assegnare ai giocatori, ma ciò richiede molto tempo. Prendi, ad esempio, il codice immaginario qui sotto.

Tutte le istruzioni if

if finishTime < 5 then
-- Ottieni una medaglia d'oro
end
if finishTime >= 5 and <= 10 then
-- Ottieni 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 è utilizzare un'unica istruzione if e usare la parola chiave elseif per fornire condizioni alternative da testare se le condizioni precedenti non sono vere.

Usa elseif ed else

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

Quando viene eseguita l'istruzione if/then, essa inizierà dall'alto e eseguirà solo il codice per la prima condizione vera che trova.

Configura il percorso di gara

Inizia posizionando il punto di partenza e la linea di arrivo del percorso, quindi crea uno script per cronometrare il giocatore e assegnare diverse medaglie.

  1. Crea una parte ancorata chiamata FinishLine. Per rendere i test più veloci, posiziona l'inizio e la fine vicini. Puoi spostare la linea di arrivo dopo aver terminato lo script.

    Parte di Arrivo
    Intero Percorso
  2. In FinishLine, inserisci uno script chiamato RaceManager. Poi, 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 solo:

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

    local function finish()
    print("toccato la linea di arrivo")
    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. Esegui un test per verificare che finish() venga chiamato quando tocchi la linea di arrivo.

Impedisci la ripetizione di finish()

In questo momento, ogni volta che un giocatore tocca la linea di arrivo, finish() viene continuamente chiamato finché il giocatore tocca la parte.

Utilizza un booleano, una variabile che memorizza vero o falso, per assicurarti che finish() 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
    -- Viene eseguita ogni volta che il giocatore tocca la parte della linea di arrivo
    local function finish()
  2. Aggiungi una seconda condizione all'istruzione 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 fermare il ripetersi di finish(), imposta raceActive su false.


    local function finish()
    print("toccato la linea di arrivo")
    raceActive = false
    end
  4. Esegui un test della tua esperienza per controllare che vedi la tua dichiarazione di test una sola volta.

Tieni traccia del tempo

Come un'istruzione if, un ciclo while può anche utilizzare una condizione per vedere se dovrebbe essere eseguito. Per cronometrare il giocatore, crea un timer utilizzando un ciclo while true do che viene eseguito solo quando il booleano raceActive è vero.

  1. In fondo allo script, digita while raceActive == true do. Premi Invio per completare automaticamente e aggiungi il end.


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


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    task.wait(1)
    timePassed += 1
    print(timePassed)
    end
  3. Esegui un test dell'esperienza e controlla di vedere ogni secondo visualizzato nella finestra di Output.

Assegna medaglie ai giocatori

Per finire, utilizza un'istruzione if con condizioni multiple per assegnare ai giocatori una diversa medaglia premio in base alla loro performance. Usa un'istruzione if e due istruzioni elseif per controllare il tempo di completamento del giocatore e assegnargli la medaglia corretta.

  1. Per confermare che ciascuna medaglia possa essere assegnata, usa delle istruzioni di stampa.


    local function finish()
    raceActive = false
    print("Hai finito in " .. timePassed)
    end
  2. Per assegnare una medaglia d'oro, codifica un'istruzione if che confronta timePassed con il tempo di completamento desiderato. Questo esempio controlla se il tempo del giocatore è stato inferiore o uguale a 10 secondi.


    local function finish()
    raceActive = false
    print("Hai finito in " .. timePassed)
    if timePassed <= 10 then
    print("Ricevi una medaglia d'oro!")
    end
    end
  3. Esegui un test e conferma che la medaglia d'oro possa essere assegnata.

Aggiungi condizioni aggiuntive

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

  1. Per la medaglia d'argento, usa elseif e il successivo intervallo di tempo desiderato. In questo esempio, l'intervallo è maggiore di 10 secondi ma minore o uguale a 20 secondi.


    local function finish()
    raceActive = false
    print("Hai finito in " .. timePassed)
    if timePassed <= 10 then
    print("Ricevi una medaglia d'oro!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("Ricevi una medaglia d'argento!")
    end
    end
  2. Usa lo stesso schema per la medaglia di bronzo. Controlla il tuo codice con l'esempio qui sotto.


    local function finish()
    raceActive = false
    print("Hai finito in " .. timePassed)
    if timePassed <= 10 then
    print("Ricevi una medaglia d'oro!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("Ricevi una medaglia d'argento!")
    elseif timePassed > 20 and timePassed <= 30 then
    print("Ricevi una medaglia di bronzo!")
    end
    end
  3. Esegui un test per le medaglie d'argento e di bronzo.

Suggerimenti per la risoluzione dei problemi

Se non vedi apparire le medaglie d'argento e di bronzo, prova uno dei seguenti suggerimenti.

  • Ogni elseif dovrebbe avere un then dopo la sua condizione.
  • In partTouched(), assicurati che la seconda condizione dell'istruzione if utilizzi ==, come in raceActive == true.
  • Controlla che ogni elseif sia in ambito. Ogni condizione elseif deve trovarsi tra la prima riga dell'istruzione if/then e il suo ultimo end.

Aggiungi la condizione else

Se il giocatore non ha guadagnato alcuna medaglia, dovresti incoraggiarlo a riprovare. In questo caso, puoi usare un'istruzione else, che viene eseguita se nessuna altra condizione è vera, per mostrare loro un messaggio.

  1. Sotto l'ultimo elseif e sopra end, inizia una nuova riga e digita else. Non aggiungere then. Sotto else, utilizza un'istruzione di stampa per invitarli a riprovare.


    local function finish()
    raceActive = false
    print("Hai finito in " .. timePassed)
    if timePassed <= 10 then
    print("Ricevi una medaglia d'oro!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("Ricevi una medaglia d'argento!")
    elseif timePassed > 20 and timePassed <= 30 then
    print("Ricevi una medaglia di bronzo!")
    else
    print("Riprova!")
    end
    end
  2. Esegui un test per vedere il messaggio else.

Le strutture di controllo possono avere più di uno scenario. Usa le istruzioni if per impostare l'istruzione iniziale da controllare e poi aggiungi quante più condizioni elseif necessario. Infine, utilizza else per dichiarare cosa dovrebbe succedere se tutte le condizioni fornite sono false.

Partendo dall'inizio, tutte le condizioni verranno verificate, e solo la prima condizione vera eseguirà il codice. Le condizioni rimanenti non verranno controllate né il loro codice verrà eseguito.

Dopo aver completato il progetto, puoi espandere lo script per aggiungere nuovi elementi in diversi modi.

  • Aggiungi codice in modo che i giocatori possano ripetere la gara toccando la linea di partenza quando terminano.
  • Progetta un modo per visualizzare il tempo durante una gara. Puoi mostrare il tempo su una parte utilizzando una Surface GUI, come nel Tutorial per creare un ponte a tempo.
Script completato

local timePassed = 0
local finishLine = script.Parent
-- Usato per impedire a finish() e al timer di ripetersi quando la gara è finita
local raceActive = true
-- Viene eseguito quando il giocatore tocca la linea di arrivo e mostra loro un premio
local function finish()
raceActive = false
print("Hai finito in " .. timePassed)
if timePassed <= 10 then
print("Ricevi una medaglia d'oro!")
elseif timePassed > 10 and timePassed <= 20 then
print("Ricevi una medaglia d'argento!")
elseif timePassed > 20 and timePassed <= 30 then
print("Ricevi una medaglia di bronzo!")
else
print("Riprova!")
end
end
-- Controlla se un giocatore tocca la parte quando la 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 della gara mentre la gara è attiva. Deve essere in fondo allo script.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end
© 2026 Roblox Corporation. Roblox, il logo Roblox e Powering Imagination sono tra i nostri marchi registrati e non registrati negli Stati Uniti. e altri paesi.