Raccogli monete
Fa parte della sezione Scripting di giochi Roblox del percorso Lua di Coddy. Lezione 15 di 24.
Il pad del tesoro ha impostato Coins a 100. Una moneta dovrebbe aggiungere 1, e questo crea un nuovo problema.
Touched viene attivato una volta per ogni parte del corpo che tocca, quindi un singolo passo su una moneta può attivarlo diverse volte. Aggiungi 1 punto ogni volta e una singola moneta dà diversi punti.
La soluzione è un debounce: una variabile che ricorda «è già successo» e fa sì che il codice ignori le ripetizioni:
local used = false
button.Touched:Connect(function(hit)
if not used then
used = true
print("Pressed!")
end
end)not used è true mentre used è false, quindi solo il primo tocco supera if not used. a and b è true solo quando entrambi sono true: if player and not used then richiede un giocatore e una moneta non ancora usata.
Per consentire che succeda di nuovo più tardi, aspetta e reimpostala: task.wait(3) poi used = false. L'attesa mette in pausa solo questa funzione, quindi gli altri tocchi continuano ad arrivare e vengono ignorati mentre used è true.
value += 1 è una forma abbreviata di value = value + 1, e CanTouch = false fa sì che una parte smetta di attivare Touched finché non viene reimpostata su true.
Sfida
MedioLe statistiche del giocatore e le connessioni Touched sono pronte, ma premi Gioca e attraversa una moneta: il valore delle monete aumenta di più di 1.
Correggi il problema e completa la gestione delle monete:
- Ogni moneta dà esattamente 1 moneta per raccolta (un meccanismo anti-rimbalzo per moneta).
- Quando una moneta viene raccolta, scompare:
Transparency1eCanTouchfalse. - Dopo 3 secondi ricompare (
Transparency0,CanTouchtrue) e può essere raccolta di nuovo.
Provalo tu
local Players = game:GetService("Players")
local coins = workspace.Coins
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local coinsValue = Instance.new("IntValue")
coinsValue.Name = "Coins"
coinsValue.Value = 0
coinsValue.Parent = leaderstats
end)
for _, coin in coins:GetChildren() do
coin.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
if player then
player.leaderstats.Coins.Value += 1
end
end)
end
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Scripting di giochi Roblox
2Cicli e funzioni
Fila di pilastriCostruttore di scaleCostruttore di torriFabbrica di moneteLuce lampeggiantePonte che scompare5Il tuo primo gioco
Il tuo primo Obby3Eventi e giocatori
Piastra di pressionePavimento di lavaLeaderstatsChi l'ha toccato?Raccogli monetePorta a moneteEsercitati da solo: Compilatore Lua online