Haufen kommen zurück
Lektion 4 von 18 im Kurs Roblox-Spiel: Haustiersimulator von Coddy.
Sobald jeder Haufen zerstört ist, gehen dem Spiel die Münzen aus. Ein zerstörter Haufen sollte nach Settings.RespawnTime Sekunden an seinem Platz wieder erscheinen.
Der Haufen muss sich seinen Platz merken. Eine Tabelle, deren Schlüssel der Haufen ist, erledigt das:
local pileSpot = {} -- jeder Stapel -> die Stelle, auf der er steht
pileSpot[pile] = spottask.delay(seconds, fn, ...) ruft später eine Funktion mit Argumenten auf, ohne jetzt etwas anzuhalten:
task.delay(Settings.RespawnTime, spawnPile, spot)Entferne den Haufen aus der Tabelle, wenn er zerstört wird, damit die Tabelle nicht jeden Haufen behält, den es jemals gab.
Aufgabe
Einfach- Weiter oben:
local pileSpot = {}. - Speichere in
spawnPilepileSpot[pile] = spot. - Lies in
hitPile, wenn der Stapel zerbricht, seinen Platz aus, entferne ihn auspileSpot, zerstöre den Stapel und rufetask.delay(Settings.RespawnTime, spawnPile, spot)auf.
Die Stapel in dieser Lektion erscheinen nach 1 Sekunde wieder. Drücke Play und dann Check.
Probier es selbst
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)
local piles = workspace.Piles
print("A Meadow pile gives " .. Settings.PileValue .. " coins")
-- Jeder Spieler erhält 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 das Anklicken eines Haufens wird hitPile benötigt, das unterhalb von spawnPile definiert wird: Deklariere es
-- hier, vor beiden Funktionen
local hitPile
-- Ein Münzhaufen auf einem Platz: eine Kopie von ServerStorage.CoinPile mit Lebenspunkten
-- 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
pile.Parent = piles
detector.MouseClick:Connect(function(player)
hitPile(player, pile)
end)
return pile
end
-- Ein Treffer zieht einem Haufen 1 Lebenspunkt ab;
-- 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")
pile:Destroy()
end
-- Ein Haufen auf jedem Platz in der Meadow
for _, spot in workspace.Zones.Meadow.Spawns:GetChildren() do
spawnPile(spot)
end
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.