Menu
CoddyTech

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.

challenge icon

Sfida

Medio

Le 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:

  1. Ogni moneta dà esattamente 1 moneta per raccolta (un meccanismo anti-rimbalzo per moneta).
  2. Quando una moneta viene raccolta, scompare: Transparency 1 e CanTouch false.
  3. Dopo 3 secondi ricompare (Transparency 0, CanTouch true) 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
quiz iconMettiti alla prova

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

Esercitati da solo: Compilatore Lua online