הערמות חוזרות
שיעור 4 מתוך 18 בקורס משחק Roblox: סימולטור חיות מחמד של Coddy.
ברגע שכל הערימות נשברות, נגמרים המטבעות במשחק. ערימה שבורה אמורה לחזור למקום שלה אחרי Settings.RespawnTime שניות.
הערימה צריכה לזכור את המקום שלה. טבלה שהמפתח שלה הוא הערימה עושה זאת:
local pileSpot = {} -- כל ערימה -> המקום שעליו היא עומדת
pileSpot[pile] = spottask.delay(seconds, fn, ...) קוראת לפונקציה מאוחר יותר, עם ארגומנטים, בלי לעצור שום דבר כרגע:
task.delay(Settings.RespawnTime, spawnPile, spot)הסר את הערימה מהטבלה כשהיא נשברת, כדי שהטבלה לא תשמור כל ערימה שהייתה קיימת אי פעם.
אתגר
קל- קרוב לראש הקובץ:
local pileSpot = {}. - בתוך
spawnPile, שמור אתpileSpot[pile] = spot. - בתוך
hitPile, כשהערימה נשברת: קרא את המיקום שלה, הסר אותה מ־pileSpot, השמד את הערימה והפעלtask.delay(Settings.RespawnTime, spawnPile, spot).
הערימות בשיעור הזה חוזרות לאחר שנייה אחת. לחץ על Play, ואז על Check.
נסו בעצמכם
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")
-- כל שחקן מקבל Coins בטבלת המובילים
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)
-- לחיצה על ערימה צריכה את hitPile, שנכתב בהמשך, אחרי spawnPile: יש להגדיר אותו
-- כאן, לפני שניהם
local hitPile
-- ערימת מטבעות בנקודה: עותק של ServerStorage.CoinPile עם מדדי הבריאות שלה
-- והערך שלה כתכונות
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)
-- לחצו עליה כדי לפגוע בה
local detector = Instance.new("ClickDetector")
detector.Parent = pile
pile.Parent = piles
detector.MouseClick:Connect(function(player)
hitPile(player, pile)
end)
return pile
end
-- פגיעה מורידה 1 ממדד הבריאות של ערימה;
-- כשהמדד מגיע ל־0, הערימה נשברת ומעניקה את הערך שלה
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
-- ערימה בכל נקודה ב־Meadow
for _, spot in workspace.Zones.Meadow.Spawns:GetChildren() do
spawnPile(spot)
end
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.