Menu
CoddyTech

Recolector de monedas

Parte de la sección Creación de scripts para juegos de Roblox del Journey de Lua de Coddy. Lección 15 de 24.

La plataforma del tesoro estableció Coins en 100. Una moneda debería sumar 1, y eso trae un nuevo problema.

Touched se activa una vez por cada parte del cuerpo que la toca, así que un solo paso sobre una moneda puede activarlo varias veces. Suma 1 punto cada vez y una sola moneda da varios puntos.

La solución es un antirrebote: una variable que recuerda «esto ya ocurrió» y hace que el código ignore las repeticiones:

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

not used es true mientras used sea false, así que solo el primer contacto supera if not used. a and b es true solo cuando ambos son true: if player and not used then necesita un jugador y una moneda que no se haya usado.

Para que vuelva a ocurrir más tarde, espera y restablécelo: task.wait(3) después used = false. La espera pausa solo esta función, así que los demás contactos siguen llegando y se ignoran mientras used sea true.

value += 1 es una forma abreviada de value = value + 1, y CanTouch = false hace que una pieza deje de activar Touched hasta que se vuelva a establecer en true.

challenge icon

Desafío

Intermedio

leaderstats y las conexiones de Touched están listas, pero pulsa Play y atraviesa una moneda: Coins aumenta en más de 1.

Arréglalo y termina las monedas:

  1. Cada moneda otorga exactamente 1 Coin por recogida (un debounce por moneda).
  2. Una moneda recogida se oculta: Transparency 1 y CanTouch false.
  3. 3 segundos después reaparece (Transparency 0, CanTouch true) y se puede recoger de nuevo.

Pruébalo tú mismo

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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Creación de scripts para juegos de Roblox

Practica por tu cuenta: Compilador de Lua online