Menu
CoddyTech

Coletor de moedas

Parte da seção Scripts para jogos no Roblox do Journey de Lua da Coddy. Lição 15 de 24.

A plataforma do tesouro definiu Coins como 100. Uma moeda deve adicionar 1, e isso traz um novo problema.

Touched é disparado uma vez para cada parte do corpo que toca, então um único passo sobre uma moeda pode dispará-lo várias vezes. Adicione 1 ponto a cada vez, e uma única moeda dá vários pontos.

A solução é um debounce: uma variável que lembra "isso já aconteceu" e faz o código ignorar as repetições:

local used = false
button.Touched:Connect(function(hit)
	if not used then
		used = true
		print("Pressed!")
	end
end)

not used é true enquanto used é false, então apenas o primeiro toque passa por if not used. a and b é verdadeiro somente quando ambos são verdadeiros: if player and not used then precisa de um jogador e de uma moeda ainda não usada.

Para permitir que isso aconteça novamente mais tarde, espere e redefina: task.wait(3) e depois used = false. A espera pausa apenas essa função, então outros toques continuam chegando e são ignorados enquanto used é true.

value += 1 é uma forma abreviada de value = value + 1, e CanTouch = false faz uma peça parar de disparar Touched até que seja definido novamente como true.

challenge icon

Desafio

Médio

As conexões de leaderstats e Touched estão prontas, mas pressione Play e passe por uma moeda: Coins aumenta em mais de 1.

Corrija isso e finalize as moedas:

  1. Cada moeda concede exatamente 1 Coin por coleta (um debounce por moeda).
  2. Uma moeda coletada fica oculta: Transparency 1 e CanTouch false.
  3. 3 segundos depois, ela reaparece (Transparency 0, CanTouch true) e pode ser coletada novamente.

Experimente você mesmo

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 iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Scripts para jogos no Roblox

Pratique por conta própria: Compilador de Lua online