Münzen auf dem Bildschirm
Lektion 5 von 20 im Kurs Roblox-Spiel: Haustier-Simulator von Coddy.
Nun zum Client. PetClient ist ein LocalScript innerhalb des HUD, einer ScreenGui, die Roblox beim Spawnen aus StarterGui auf den Bildschirm jedes Spielers kopiert. Ein LocalScript wird auf dem Gerät des jeweiligen Spielers ausgeführt und kann den Spieler benennen, für den es ausgeführt wird:
local me = game:GetService("Players").LocalPlayerIn einem Server-Script ist LocalPlayer nil: Der Server bedient alle Spieler gleichzeitig.
Der Server fügt dem Spieler kurz nach dessen Beitritt leaderstats hinzu, daher wartet der Client mit WaitForChild darauf. Dann zeigt er die Münzen im Coins-Label des HUD an und aktualisiert die Anzeige jedes Mal, wenn sie sich ändern: Das Changed-Ereignis eines IntValue wird mit dem neuen Wert ausgelöst.
Das Label zeigt nur an, was der Server festgelegt hat. Eine Änderung von Coins.Value in einem LocalScript würde nur die Ansicht dieses Spielers ändern, nicht aber den Server.
Aufgabe
MittelZeige die Münzen des Spielers auf seinem Bildschirm an.
- In
PetClient:local Players = game:GetService("Players"),local me = Players.LocalPlayer,local hud = script.Parent. local coins = me:WaitForChild("leaderstats"):WaitForChild("Coins")- Schreibe
showCoins():hud.Coins.Text = "Coins: " .. coins.Value. Rufe die Funktion einmal auf und verbinde sie mitcoins.Changed.
Drücke „Spielen“ und zerbrich einen Haufen: Oben links steht Coins: 5. Klicke dann auf „Prüfen“.
Probier es selbst
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)
local piles = workspace.Piles
local pileSpot = {} -- jeder Haufen -> der Platz, auf dem er steht
print("A Meadow pile gives " .. Settings.PileValue .. " coins")
-- Jeder Spieler bekommt Coins auf der Bestenliste
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)
-- Für den Klick auf einen Haufen wird hitPile benötigt, das unterhalb von spawnPile definiert wird: deklariere es
-- hier, vor beiden
local hitPile
-- Ein Münzhaufen auf einem Platz: eine Kopie von ServerStorage.CoinPile mit Gesundheit
-- und Wert als Attributen
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)
-- Klicke darauf, um ihn zu treffen
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
-- Ein Treffer verringert die Gesundheit eines Haufens um 1;
-- bei 0 zerbricht der Haufen und zahlt seinen Wert aus
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()
-- ein neuer Haufen auf demselben Platz, ein paar Sekunden später
task.delay(Settings.RespawnTime, spawnPile, spot)
end
-- Ein Haufen auf jedem Platz in Meadow
for _, spot in workspace.Zones.Meadow.Spawns:GetChildren() do
spawnPile(spot)
end
Alle Lektionen in Roblox-Spiel: Haustier-Simulator
2Client und Server
Münzen auf dem BildschirmÜbe selbstständig: Roblox-Playground