Questo progetto è un altro esempio di utilizzo per i loop in un modo pratico. Per questo ponte, i giocatori toccheranno un pulsante per rendere un ponte camminabile per un tempo limitato prima che scompaia. Per creare un timer e mostrare il tempo rimanente a un Giocatore, userai per i loop.
Configurazione del progetto
Questo ponte può essere incluso in qualsiasi progetto di gioco con sfide basate sul movimento, come un Percorso ad ostacoli.
Creazione di parti
Trova un luogo per costruire un ponte, come un fiume o uno spazio grande in un Percorso ad ostacoli. Crea tre ancorate parti come quelle seguenti.
- Display del Temporizzatore
- Ponte
- Ponte del pulsante
Quando Inattivo, Inattiva, Inattivi, il ponte sarà semi-trasparente. Per farlo, seleziona il Ponte e cambia le sue proprietà.
- Trasparenza = 0.8
- CanCollide = Falso
Creazione della schermata del timer
Quando si attraversa il ponte, i giocatori dovranno vedere quante secondi sono rimasti prima che il ponte scompaia. Un modo per visualizzare le immagini o il testo è aggiungendo un oggetto chiamato a Surface GUI a una parte. Surface GUIs possono anche essere utilizzati per creare segni, barre di salute personalizzate e sistemi di inventario. Questo tutorial andrà attraverso questo rapidamente, ma ulterior
Seleziona TimerDisplay e aggiungi un SurfaceGui . Quindi, legato alla Surface Gui, aggiungi un TextLabel .
Seleziona la GUI or Intefaccia grafica utentedella superficie. Nelle Proprietà, apporta i seguenti cambiamenti:
- Cambia il viso in modo da poter vedere l'etichetta di testo sulla parte anteriore del timer in cui il giocatore sta guardando.
Seleziona il TextLabel. In the Properties, make the following changes:
- Imposta Dimensione su {1, 0},{1, 0} .
- Imposta TextScaled su vero.
- Imposta Text per essere vuoto. Il testo verrà aggiornato utilizzando lo script.
Configurazione dello script
Ora che il timer è in Posto, crea uno script per controllare il ponte e visualizzare il numero di conto alla rovescia ai giocatori.
Nella parte del ponte, aggiungi uno script nuovo chiamato TimedBridge. In quel script, crea le seguenti variabili.
local bridge = script.Parentlocal button = workspace.ButtonBridgelocal timerText = workspace.TimerDisplay.SurfaceGui.TextLabel-- Quanto tempo il ponte resterà solidolocal timerDuration = 5
Codice l'interazione touch
Per utilizzare il ponte, dovrai creare due funzioni. Una funzione creerà il ponte percorribile e visualizzerà il timer. L'altra funzione ascolterà se un giocatore tocca il pulsante che attiva il ponte.
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 = 5local function startTimer()print("Countdown started")endCodice una funzione chiamata buttonPressed() per controllare se un umanoide tocca il pulsante. La funzione dovrebbe accettare un parametro di partTouched e quindi avere una dichiarazione vuota se un umanoide viene rilevato in quella parte.
local function startTimer()print("Countdown started")endlocal function buttonPressed(partTouched)local character = partTouched.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenendendPer avviare il timer, nella dichiarazione if, chiama la funzione startTimer().
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendAlla fine di buttonPressed(), connect the buttonPressed() function to the button's Touched event.
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbutton.Touched:Connect(buttonPressed)Esegui il progetto. Tocca la parte e controlla nella finestraOutput per vedere la dichiarazione di stampa.
Risolvere i problemi
A questo punto, se il ponte non funziona come previsto, prova uno dei seguenti sotto. Errore : Messaggio di errore dicendo: "... is not a valid member of workspace" .
Nello script TimedBridge, controlla che tutte le parti siano spellate esattamente come vengono visualizzate nell'Explorer. Problema : Non riesco a vedere le parti.
Assicurati che tutte le tre parti siano ancorate.
Controlla la proprietà Trasparenza per il ponte.
Creazione del Timer
Quando i giocatori passano sul ponte, startTimer() renderà il ponte camminabile e inizierà il timer. Una volta che il timer raggiunge 0, il ponte diventerà non camminabile, causando chiunque non sia abbastanza veloce da Caduta.
Rendere il ponte camminabile
Per Iniziare, cominciare, lo script dovrà rendere il ponte solido, o collidibile e quindi iniziare un timer finché diventa in走abile.
Per rendere il ponte camminabile, in startTimer() , cambia la proprietà di trasparenza del ponte a 0 (opaco) e la proprietà di CanCollide a true.
local function startTimer()-- Rendi il ponte visibile e camminabilebridge.Transparency = 0bridge.CanCollide = trueendPer creare un timer che conta a basso, crea un for loop con i seguenti valori.
- Controllo variabile : chiamato count , impostato su timerDuration .
- Fine : 0
- Incremento : -1
local function startTimer()-- Rendi il ponte visibile e camminabilebridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendendPer mostrare il timer ai giocatori, cambia il testo in timerText per mostrare il conteggio facendo clic su timerText.Text = count . Ogni volta che il for loop passa attraverso un'iterazione, mostrerà ai giocatori il prossimo numero nel timer.
for count = timerDuration, 0, -1 dotimerText.Text = countendUsa la funzione task.wait per eseguire il ciclo di ripetizione solo una volta al secondo.
for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)endEsegui il Gioco. Quando tocchi il pulsante, il ponte dovrebbe apparire e il timer dovrebbe Iniziare, cominciare, quindi completarlo.
Mantenere il ponte dal riavvio
Nota, however, se ti muovi sul pulsante, il timer continuerà ad essere riavviato.
Questo perché il for loop viene chiamato ogni volta che tocchi il pulsante e inizi il for loop dall'inizio. Per mantenere il timer da riavviare costantemente, dovrai aggiungere unBoolean, un tipo di variabile, che controlla se o no startTimer() può essere chiamato di nuovo. I booleani sono scritti allo stesso modo di altre variabili, ma invece di utilizzare numeri o stringhe, possono essere impostati solo su vero o falso. In questa situazione, lo script utilizza un booleano per controllare se il timer è in esecuzione prima di avviarlo.
Nella parte superiore dello script, sotto le tue variabili, crea una variabile chiamata timerActive e imposta su false poiché nessuno ha ancora premuto il pulsante.
local timerDuration = 5local timerActive = falselocal function startTimer()Per assicurarsi che il timer non inizi mai quando il timerActive boolean è falso, aggiungi una seconda condizione all'if statement in buttonPressed() .
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and timerActive == false thenstartTimer()endendPer evitare che startTimer() esegua di nuovo prima che il timer finisca, imposta il valore di verifica timerActive su true.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = trueNella funzione startTimer(), dopo il for loop, imposta il ponte alle sue proprietà originali cambiando la trasparenza del ponte a 0.8 e CanCollide a false.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = true-- Per il loop che conta da timerDurationfor count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end-- Rendi il ponte non camminabilebridge.Transparency = 0.8bridge.CanCollide = falseendL'ultima cosa per ripristinare il ponte è cambiare il timerText in una stringa vuota come quello originale. Quindi, imposta il timerActive boolean su false.
bridge.Transparency = 0.8bridge.CanCollide = falsetimerText.Text = ""timerActive = falseProva e ripeti per assicurarti che il ponte possa essere utilizzato più volte.
Completa lo script del ponte temporale
local bridge = script.Parent
-- Ottiene il pulsante come viene digitato nell'Explorer
local button = workspace.ButtonBridge
-- Ottiene la parte per l'esposizione
local timerPart = workspace.TimerDisplay
-- Ottiene il testo che mostrerà il timer
local timerText = timerPart.SurfaceGui.TextLabel
-- Quanto tempo i giocatori devono attraversare il ponte
local timerDuration = 5
local timerActive = false
local function startTimer()
print("Countdown started")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- Per il loop che conta da timerDuration
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- Rendi il ponte non camminabile
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)
Panoramica
I loop possono essere combinati con diversi mezzi di interazione per creare momenti di gioco divertenti. In questo Tutoriale, viene creato un ponte temporizzato utilizzando un for loop che funziona come conto alla rovescia. Durante il conto alla rovescia, i giocatori ricevono un tempo limitato per attraversare.