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 ciò che dovrebbe accadere sotto diverse condizioni. La sintassi è la seguente:

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 codificare un percorso di parkour in cui i corridori ricevono premi a seconda del loro tempo di completamento.

Codifica condizioni multiple

Per questo progetto, potresti scrivere un'istruzione if unica per ogni 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 l'istruzione if/then viene eseguita, inizierà dall'alto e eseguirà solo il codice per la prima condizione vera che trova.

Imposta 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 completato lo script.

    Parte di Arrivo
    Intero Percorso
  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 solo:

    • Codifica una funzione chiamata partTouched() che esegue finish() quando un giocatore la 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. Fai un test di gioco e controlla che finish() venga chiamato quando tocchi la linea di arrivo.

Impedire che finish() venga ripetuto

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

Usa un booleano, una variabile che memorizza vero o falso, per garantire 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 eseguito 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 finish() dal essere chiamato di nuovo, imposta raceActive su false.

    local function finish()
    print("toccato la linea di arrivo")
    raceActive = false
    end
  4. Fai un test di gioco per controllare che vedi la tua istruzione di stampa di test solo una 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 aggiungere 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. Fai un test di gioco e controlla che vedi ogni secondo visualizzato nella finestra Output.

Assegna medaglie ai giocatori

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

  1. Per confermare che ogni medaglia possa essere assegnata, utilizza 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. Fai un test di gioco 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. Fai un test di gioco 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 nessuna delle medaglie, dovresti incoraggiarlo a riprovare. In questo caso, puoi utilizzare 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("Riprovare!")
    end
    end
  2. Fai un test di gioco 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, quindi aggiungi quante più condizioni elseif necessarie. Infine, usa else per dichiarare cosa dovrebbe accadere se tutte le condizioni date sono false.

Iniziando dall'alto, tutte le condizioni verranno controllate 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 alcuni modi extra.

  • Aggiungi 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 visualizzare 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("Riprovare!")
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)
-- Tieni traccia del tempo di 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.