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.
Desafío
Intermedioleaderstats 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:
- Cada moneda otorga exactamente 1 Coin por recogida (un debounce por moneda).
- Una moneda recogida se oculta:
Transparency1yCanTouchfalse. - 3 segundos después reaparece (
Transparency0,CanTouchtrue) 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
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
2Bucles y funciones
Fila de pilaresConstructor de escalerasConstructor de torresFábrica de monedasLuz parpadeantePuente que desaparece5Tu primer juego
Tu primer Obby3Eventos y jugadores
Panel táctilSuelo de lavaEstadísticas de líder¿Quién lo tocó?Recolector de monedasPuerta de monedasPractica por tu cuenta: Compilador de Lua online