Esercizio sui cicli - crea un ponte a tempo

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Questo progetto è un altro esempio di utilizzo dei cicli for in modo pratico. Per questo ponte, i giocatori toccheranno un pulsante per rendere il ponte percorribile per un tempo limitato prima che scompaia. Per creare un timer e mostrare il tempo rimanente a un giocatore, utilizzerai i cicli for.

Imposta il progetto

Questo ponte può essere incluso in qualsiasi progetto Roblox con sfide basate sul movimento, come un obby.

Crea le parti

  1. Trova un luogo per costruire un ponte, come un fiume o un grande vuoto in un obby. Crea tre parti ancorate come di seguito.

    • TimerDisplay
    • Bridge
    • ButtonBridge
  2. Quando è inattivo, il ponte sarà semi-trasparente. Per farlo, seleziona il Bridge e modifica le sue proprietà.

    • Transparency = 0.8
    • CanCollide = False

Crea il display del timer

Quando attraversano il ponte, i giocatori dovranno vedere quanti secondi rimangono prima che il ponte scompaia. Un modo per visualizzare immagini o testo è aggiungere un oggetto chiamato Surface GUI a una parte. Le Surface GUI possono anche essere utilizzate per creare segnali in gioco, barre della salute personalizzate e sistemi di inventario. Questo tutorial passerà rapidamente attraverso questo, ma ulteriori informazioni possono essere trovate nella sezione Tutorials.

  1. Seleziona TimerDisplay e aggiungi una SurfaceGui. Poi, come figlio della Surface Gui, aggiungi un TextLabel.

  2. Seleziona la Surface GUI. Nelle Proprietà, apporta le seguenti modifiche:

    • Cambia il Face in modo da poter vedere l'etichetta di testo sulla parte anteriore del timer dove il giocatore sta guardando.
  3. Seleziona il TextLabel. Nelle Proprietà, apporta le seguenti modifiche:

    • Imposta Size su {1, 0},{1, 0}.
    • Imposta TextScaled su true.
    • Imposta Text su vuoto. Il testo sarà aggiornato utilizzando lo script.

Imposta lo script

Ora che il timer è in posizione, crea uno script per controllare il ponte e visualizzare il numero del conto alla rovescia ai giocatori.

  1. Nella parte Bridge, aggiungi un nuovo script chiamato TimedBridge. In quello script, crea le seguenti variabili.

    local bridge = script.Parent
    local button = workspace.ButtonBridge
    local timerText = workspace.TimerDisplay.SurfaceGui.TextLabel
    -- Quanto tempo il ponte rimarrà solido
    local timerDuration = 5

Codifica l'interazione al tocco

Per utilizzare il ponte, dovrai creare due funzioni. Una funzione renderà il ponte percorribile e visualizzerà il timer. L'altra funzione ascolterà se un giocatore tocca il pulsante che attiva il ponte.

  1. Crea una nuova funzione chiamata startTimer() con una dichiarazione di stampa all'interno. Utilizzerai la dichiarazione di stampa per testare il tuo codice.

    local timerDuration = 5
    local function startTimer()
    print("Countdown started")
    end
  2. Codifica una funzione chiamata buttonPressed() per controllare se un umanoide tocca il pulsante. La funzione dovrebbe accettare un parametro di partTouched, e poi avere un'istruzione if vuota se un umanoide viene rilevato in quella parte.

    local function startTimer()
    print("Countdown started")
    end
    local function buttonPressed(partTouched)
    local character = partTouched.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    end
    end
  3. Per avviare il timer, nell'istruzione if, chiama la funzione startTimer().

    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
  4. Sotto la fine di buttonPressed(), collega la funzione buttonPressed() all'evento Touched del pulsante.

    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
    button.Touched:Connect(buttonPressed)
  5. Esegui il progetto. Tocca la parte e controlla nella finestra di Output per vedere la dichiarazione di stampa.

Suggerimenti per la risoluzione dei problemi

A questo punto, se il ponte non funziona come previsto, prova una delle seguenti soluzioni.

Problema: Messaggio di errore che dice: "... non è un membro valido di workspace".

  • Nello script TimedBridge, controlla che tutte le parti siano scritte esattamente come si vedono nell'Explorer.

Problema: Non riesco a vedere le parti.

  • Assicurati che tutte e tre le parti siano Ancorate.
  • Controlla la proprietà Transparency per il ponte.

Crea il timer

Ogni volta che i giocatori calpestano il ponte, startTimer() renderà il ponte percorribile e avvierà il timer. Una volta che il timer raggiunge 0, il ponte diventerà non percorribile, causando la caduta di chi non è abbastanza veloce.

Rendi il ponte percorribile

Per iniziare, lo script dovrà rendere il ponte solido, o collidibile e poi avviare un timer fino a quando non diventa non percorribile.

  1. Per rendere il ponte percorribile, in startTimer(), cambia la proprietà Transparency del ponte a 0 (opaco) e la proprietà CanCollide a true.

    local function startTimer()
    -- Rendi il ponte visibile e percorribile
    bridge.Transparency = 0
    bridge.CanCollide = true
    end
  2. Per creare un timer che conta alla rovescia, crea un ciclo for con i seguenti valori.

    • Variabile di controllo: chiamata count, impostata su timerDuration.
    • Fine: 0
    • Incremento: -1
    local function startTimer()
    -- Rendi il ponte visibile e percorribile
    bridge.Transparency = 0
    bridge.CanCollide = true
    for count = timerDuration, 0, -1 do
    end
    end
  3. Per mostrare il timer ai giocatori, cambia il testo in timerText per visualizzare count digitando timerText.Text = count. Ogni volta che il ciclo for passa attraverso un'iterazione, mostrerà ai giocatori il numero successivo nel timer.

    for count = timerDuration, 0, -1 do
    timerText.Text = count
    end
  4. Usa una funzione task.wait per far sì che il ciclo for venga eseguito solo una volta al secondo.

    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
  5. Esegui il gioco. Quando tocchi il pulsante, il ponte dovrebbe apparire e il timer inizierà, poi completerà.

Impedire il riavvio del ponte

Nota però che, se ti muovi sul pulsante, il timer continuerà a riavviarsi.

Questo perché il ciclo for viene chiamato ogni volta che tocchi il pulsante e inizia il ciclo for dall'inizio. Per impedire che il timer si riavvii continuamente, dovrai aggiungere un booleano, un tipo di variabile, che controllerà se startTimer() può essere chiamato di nuovo.

I booleani sono scritti allo stesso modo delle altre variabili, ma invece di utilizzare numeri o stringhe, possono essere impostati solo su true o false. In questa situazione, lo script utilizzerà un booleano per controllare se il timer è attualmente in esecuzione prima di avviarlo.

  1. In cima al tuo script, sotto le tue variabili, crea una variabile chiamata timerActive e impostala su false poiché nessuno ha ancora premuto il pulsante.

    local timerDuration = 5
    local timerActive = false
    local function startTimer()
  2. Per assicurarti che il timer inizi solo quando il booleano timerActive è false, aggiungi una seconda condizione all'istruzione if in buttonPressed().

    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and timerActive == false then
    startTimer()
    end
    end
  3. Per impedire che startTimer() venga eseguito di nuovo prima che il timer scada, imposta il booleano timerActive su true.

    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
  4. Nella funzione startTimer(), dopo il ciclo for, ripristina il ponte alle sue proprietà originali cambiando la trasparenza del ponte a 0.8 e CanCollide a false.

    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
    -- Ciclo for che conta alla rovescia da timerDuration
    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
    -- Rendi il ponte non percorribile
    bridge.Transparency = 0.8
    bridge.CanCollide = false
    end
  5. Un'ultima cosa per ripristinare il ponte è cambiare il timerText in una stringa vuota come era originariamente. Poi, imposta il booleano timerActive su false.

    bridge.Transparency = 0.8
    bridge.CanCollide = false
    timerText.Text = ""
    timerActive = false
  6. Fai un test di gioco e controlla per assicurarti che il ponte possa essere utilizzato più volte.

Script completo del ponte a tempo

local bridge = script.Parent
-- Ottiene il pulsante come è scritto nell'Explorer
local button = workspace.ButtonBridge
-- Ottiene la parte per il display
local timerPart = workspace.TimerDisplay
-- Ottiene il testo che visualizzerà il timer
local timerText = timerPart.SurfaceGui.TextLabel
-- Quanto tempo i giocatori hanno per attraversare il ponte
local timerDuration = 5
local timerActive = false
local function startTimer()
print("Countdown started")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- Ciclo for che conta alla rovescia da timerDuration
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- Rendi il ponte non percorribile
bridge.Transparency = 0.8
bridge.CanCollide = false
timerText.Text = ""
timerActive = false
end
local function buttonPressed(partTouched)
local character = partTouched.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
print("part touched")
if humanoid and timerActive == false then
print("starting timer")
startTimer()
end
end
button.Touched:Connect(buttonPressed)

I cicli possono essere combinati con diversi mezzi di interazione per creare momenti di gioco divertenti. In questo tutorial, è stato creato un ponte a tempo utilizzando un ciclo for che funge da conto alla rovescia. Durante il conto alla rovescia, ai giocatori viene dato un tempo limitato per attraversare.

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