Menu
CoddyTech

הערמות חוזרות

שיעור 4 מתוך 18 בקורס משחק Roblox: סימולטור חיות מחמד של Coddy.

ברגע שכל הערימות נשברות, נגמרים המטבעות במשחק. ערימה שבורה אמורה לחזור למקום שלה אחרי Settings.RespawnTime שניות.

הערימה צריכה לזכור את המקום שלה. טבלה שהמפתח שלה הוא הערימה עושה זאת:

local pileSpot = {} -- כל ערימה -> המקום שעליו היא עומדת
pileSpot[pile] = spot

task.delay(seconds, fn, ...) קוראת לפונקציה מאוחר יותר, עם ארגומנטים, בלי לעצור שום דבר כרגע:

task.delay(Settings.RespawnTime, spawnPile, spot)

הסר את הערימה מהטבלה כשהיא נשברת, כדי שהטבלה לא תשמור כל ערימה שהייתה קיימת אי פעם.

challenge icon

אתגר

קל
  1. קרוב לראש הקובץ: local pileSpot = {}.
  2. בתוך spawnPile, שמור את pileSpot[pile] = spot.
  3. בתוך 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
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה משחק Roblox: סימולטור חיות מחמד