Monete sullo schermo
Lezione 5 di 18 del corso Gioco Roblox: Simulatore di animali domestici di Coddy.
Ora il client. PetClient è uno LocalScript all'interno dell'HUD, una ScreenGui che Roblox copia da StarterGui sullo schermo di ogni giocatore quando genera il personaggio. Un LocalScript viene eseguito sul dispositivo del giocatore stesso e può identificare il giocatore per cui viene eseguito:
local me = game:GetService("Players").LocalPlayerIl server inserisce leaderstats nel giocatore poco dopo che si unisce, quindi il client lo attende con WaitForChild. Poi mostra le monete nell'etichetta Coins dell'HUD e lo aggiorna ogni volta che cambiano: l'evento Changed di un IntValue si attiva con il nuovo valore.
L'etichetta mostra solo ciò che ha deciso il server. Modificare Coins.Value in un LocalScript cambierebbe la visualizzazione di questo giocatore, ma non cambierebbe nulla sul server.
Sfida
MedioIn PetClient:
- Ottieni
Players,local me = Players.LocalPlayerelocal hud = script.Parent. - Attendi
leaderstatse il suoCoins. - Scrivi
showCoins(), che impostahud.Coins.TextsuCoins: 5(il valore), chiamala una volta e collegala aCoins.Changed.
Premi Play e rompi una pila. Poi Check.
Provalo tu
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)
local piles = workspace.Piles
local pileSpot = {} -- ogni mucchio -> il punto su cui si trova
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)
-- Il clic su un mucchio richiede hitPile, definita sotto spawnPile: dichiarala
-- qui, prima di entrambe
local hitPile
-- Un mucchio di monete su un punto: una copia di ServerStorage.CoinPile con la sua salute
-- e il suo 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)
-- cliccaci sopra per colpirlo
local detector = Instance.new("ClickDetector")
detector.Parent = pile
pileSpot[pile] = spot
pile.Parent = piles
detector.MouseClick:Connect(function(player)
hitPile(player, pile)
end)
return pile
end
-- Un colpo riduce di 1 la salute di un mucchio;
-- a 0 il mucchio 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")
local spot = pileSpot[pile]
pileSpot[pile] = nil
pile:Destroy()
-- un nuovo mucchio nello stesso punto, qualche secondo dopo
task.delay(Settings.RespawnTime, spawnPile, spot)
end
-- Un mucchio su ogni punto della 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.