Monete sullo schermo
Lezione 5 di 20 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 entra in gioco. Un LocalScript viene eseguito sul dispositivo del giocatore e può identificare il giocatore per cui viene eseguito:
local me = game:GetService("Players").LocalPlayerIn uno Script del server, LocalPlayer è nil: il server gestisce tutti i giocatori contemporaneamente.
Il server inserisce leaderstats nel giocatore poco dopo che entra, quindi il client lo attende con WaitForChild. Poi mostra le monete nell'etichetta Coins dell'HUD e lo fa di nuovo 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 e nient'altro sul server.
Sfida
MedioMostra le monete del giocatore sul suo schermo.
- In
PetClient:local Players = game:GetService("Players"),local me = Players.LocalPlayer,local hud = script.Parent. local coins = me:WaitForChild("leaderstats"):WaitForChild("Coins")- Scrivi
showCoins():hud.Coins.Text = "Coins: " .. coins.Value. Chiamala una volta e collegala acoins.Changed.
Premi «Gioca» e rompi una pila: in alto a sinistra appare Coins: 5. Poi premi «Verifica».
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 dopo 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)
-- clicca sul mucchio 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, pochi secondi dopo
task.delay(Settings.RespawnTime, spawnPile, spot)
end
-- Un mucchio in ogni punto del Meadow
for _, spot in workspace.Zones.Meadow.Spawns:GetChildren() do
spawnPile(spot)
end
Tutte le lezioni di Gioco Roblox: Simulatore di animali domestici
2Client e server
Monete sullo schermoEsercitati da solo: Playground Roblox