Menu
CoddyTech

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").LocalPlayer

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

challenge icon

Aufgabe

Mittel

Zeige die Münzen des Spielers auf seinem Bildschirm an.

  1. In PetClient: local Players = game:GetService("Players"), local me = Players.LocalPlayer, local hud = script.Parent.
  2. local coins = me:WaitForChild("leaderstats"):WaitForChild("Coins")
  3. Schreibe showCoins(): hud.Coins.Text = "Coins: " .. coins.Value. Rufe die Funktion einmal auf und verbinde sie mit coins.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

Übe selbstständig: Roblox-Playground