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.
Desafio
MédioAs 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:
- Cada moeda concede exatamente 1 Coin por coleta (um debounce por moeda).
- Uma moeda coletada fica oculta:
Transparency1eCanTouchfalse. - 3 segundos depois, ela reaparece (
Transparency0,CanTouchtrue) 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
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
2Laços e funções
Fileira de pilaresConstrutor de escadasConstrutor de torresFábrica de moedasLuz piscantePonte desaparecendo5Seu primeiro jogo
Seu primeiro Obby3Eventos e jogadores
Plataforma de toqueChão de lavaLeaderstatsQuem tocou?Coletor de moedasPorta de moedasPratique por conta própria: Compilador de Lua online