Pièces à l’écran
Leçon 5 sur 20 du cours Jeu Roblox : simulateur d’animaux de Coddy.
Maintenant, le client. PetClient est un LocalScript dans le HUD, un ScreenGui que Roblox copie depuis StarterGui sur l’écran de chaque joueur lorsqu’il apparaît. Un LocalScript s’exécute sur l’appareil de ce joueur et peut déterminer le nom du joueur pour lequel il s’exécute :
local me = game:GetService("Players").LocalPlayerDans un Script serveur, LocalPlayer vaut nil : le serveur s’occupe de tous les joueurs à la fois.
Le serveur ajoute leaderstats au joueur un instant après son arrivée ; le client attend donc avec WaitForChild. Il affiche ensuite les pièces dans le libellé Coins du HUD, puis met cet affichage à jour chaque fois que leur nombre change : l’événement Changed d’un IntValue se déclenche avec la nouvelle valeur.
Le libellé affiche uniquement ce que le serveur a décidé. Modifier Coins.Value dans un LocalScript changerait ce que ce joueur voit, et rien sur le serveur.
Défi
MoyenAffiche les pièces du joueur à l’écran.
- Dans
PetClient:local Players = game:GetService("Players"),local me = Players.LocalPlayer,local hud = script.Parent. local coins = me:WaitForChild("leaderstats"):WaitForChild("Coins")- Écris
showCoins():hud.Coins.Text = "Coins: " .. coins.Value. Appelle-la une fois et connecte-la àcoins.Changed.
Appuie sur « Jouer » et détruis un tas : en haut à gauche, il est indiqué Coins: 5. Puis clique sur « Vérifier ».
Essayez vous-même
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)
local piles = workspace.Piles
local pileSpot = {} -- chaque pile -> l’emplacement sur lequel elle se trouve
print("A Meadow pile gives " .. Settings.PileValue .. " coins")
-- Chaque joueur reçoit Coins dans le classement
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)
-- Le clic sur une pile nécessite hitPile, défini plus bas que spawnPile : déclarez-le
-- ici, avant les deux
local hitPile
-- Une pile de pièces sur un emplacement : une copie de ServerStorage.CoinPile avec sa santé
-- et sa valeur comme attributs
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)
-- cliquez dessus pour la frapper
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 coup retire 1 point de santé à une pile ;
-- à 0, la pile se brise et rapporte sa valeur
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()
-- une nouvelle pile au même emplacement, quelques secondes plus tard
task.delay(Settings.RespawnTime, spawnPile, spot)
end
-- Une pile à chaque emplacement de Meadow
for _, spot in workspace.Zones.Meadow.Spawns:GetChildren() do
spawnPile(spot)
end
Toutes les leçons de Jeu Roblox : simulateur d’animaux
2Client et serveur
Pièces à l’écranEntraînez-vous par vous-même : Playground Roblox