Pratica dei 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 un 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 posto dove 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à.

    • Trasparenza = 0.8
    • CanCollide = False

Crea il display del timer

Quando attraversano il ponte, i giocatori devono 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 di gioco, barre di salute personalizzate e sistemi di inventario. Questo tutorial verrà trattato brevemente, ma puoi trovare maggiori informazioni nella sezione Tutorial.

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

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

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

    • Imposta Dimensione su {1, 0},{1, 0}.
    • Imposta TextScaled su true.
    • Imposta Testo come vuoto. Il testo sarà aggiornato tramite lo script.

Imposta lo script

Ora che il timer è in posizione, crea uno script per controllare il ponte e visualizzare il numero di countdown per i giocatori.

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


    local bridge = script.Parent
    local button = workspace.ButtonBridge
    local timerText = workspace.TimerDisplay.SurfaceGui.TextLabel
    -- Quanto a lungo 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 un'istruzione print all'interno. Utilizzerai l'istruzione print per testare il tuo codice.


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


    local function startTimer()
    print("Countdown avviato")
    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. Alla fine della 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 l'istruzione print.

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à di Trasparenza 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 diventa non percorribile, causando a chi non è abbastanza veloce di cadere.

Rendi il ponte percorribile

Per cominciare, lo script dovrà rendere il ponte solido, ossia collidibile e quindi avviare un timer fino a quando non diventa non percorribile.

  1. Per rendere il ponte percorribile, in startTimer(), cambia la proprietà di Trasparenza 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 attraversa 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 l'esperienza. Quando tocchi il pulsante, il ponte dovrebbe apparire e il timer inizierà, quindi completerà.

Impedire il riavvio del ponte

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

Questo accade 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 usare 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. Nella parte superiore del 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 parta solo quando il booleano timerActive è falso, 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 evitare 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. Esegui un test e verifica 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 Text che visualizzerà il timer
local timerText = timerPart.SurfaceGui.TextLabel
-- Quanto tempo hanno i giocatori per attraversare il ponte
local timerDuration = 5
local timerActive = false
local function startTimer()
print("Countdown avviato")
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("parte toccata")
if humanoid and timerActive == false then
print("avvio 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, viene creato un ponte a tempo utilizzando un ciclo for che funge da countdown. Durante il countdown, 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.