Menu
CoddyTech

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] = spot

task.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.

challenge icon

Sfida

Facile
  1. Vicino all’inizio: local pileSpot = {}.
  2. In spawnPile, memorizza pileSpot[pile] = spot.
  3. In hitPile, quando il mucchio si rompe: leggi la sua posizione, rimuovilo da pileSpot, distruggi il mucchio e task.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
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Gioco Roblox: Simulatore di animali domestici