Le pile ritornano
Lezione 4 di 18 del corso Gioco Roblox: Simulatore di animali domestici di Coddy.
Quando tutti i cumuli sono stati distrutti, il gioco esaurisce le monete. Un cumulo distrutto dovrebbe ricomparire al suo posto dopo Settings.RespawnTime secondi.
Il cumulo deve ricordare il suo posto. Una tabella indicizzata tramite il cumulo permette di farlo:
local pileSpot = {} -- ogni pila -> la posizione su cui si trova
pileSpot[pile] = spottask.delay(seconds, fn, ...) chiama una funzione in un secondo momento, con argomenti, senza interrompere nulla nel frattempo:
task.delay(Settings.RespawnTime, spawnPile, spot)Rimuovi il cumulo dalla tabella quando si rompe, così la tabella non conserva ogni cumulo esistito.
Sfida
Facile- Vicino all’inizio:
local pileSpot = {}. - In
spawnPile, memorizzapileSpot[pile] = spot. - In
hitPile, quando il mucchio si rompe: leggi la sua posizione, rimuovilo dapileSpot, distruggi il mucchio etask.delay(Settings.RespawnTime, spawnPile, spot).
I mucchi di questa lezione ricompaiono dopo 1 secondo. Premi Play, poi Check.
Provalo tu
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)
local piles = workspace.Piles
print("A Meadow pile gives " .. Settings.PileValue .. " coins")
-- Ogni giocatore riceve Coins nella classifica
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local coins = Instance.new("IntValue")
coins.Name = "Coins"
coins.Parent = leaderstats
end)
-- Per gestire il clic su una pila serve hitPile, definita dopo spawnPile: dichiarala
-- qui, prima di entrambe
local hitPile
-- Una pila di monete su un punto: una copia di ServerStorage.CoinPile con la salute
-- e il valore come attributi
local function spawnPile(spot)
local pile = ServerStorage.CoinPile:Clone()
pile.Position = spot.Position
pile:SetAttribute("MaxHealth", Settings.PileHealth)
pile:SetAttribute("Health", Settings.PileHealth)
pile:SetAttribute("Value", Settings.PileValue)
-- Fai clic sulla pila per colpirla
local detector = Instance.new("ClickDetector")
detector.Parent = pile
pile.Parent = piles
detector.MouseClick:Connect(function(player)
hitPile(player, pile)
end)
return pile
end
-- Un colpo riduce di 1 la salute di una pila;
-- a 0 la pila si rompe e assegna il suo valore
function hitPile(player, pile)
local health = pile:GetAttribute("Health") - 1
if health > 0 then
pile:SetAttribute("Health", health)
return
end
player.leaderstats.Coins.Value += pile:GetAttribute("Value")
pile:Destroy()
end
-- Una pila su ogni punto di Meadow
for _, spot in workspace.Zones.Meadow.Spawns:GetChildren() do
spawnPile(spot)
end
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.