تعود الأكوام
الدرس 4 من 18 في دورة لعبة Roblox: محاكي الحيوانات الأليفة على Coddy.
بمجرد تكسير كل الأكوام، تنفد العملات في اللعبة. ينبغي أن يعود الكوم المكسور إلى موضعه بعد Settings.RespawnTime ثانية.
يجب أن يتذكر الكوم موضعه. يحقق جدول مفهرس بالكوم ذلك:
local pileSpot = {} -- كل pile -> الموضع الذي تقف عليه
pileSpot[pile] = spotتستدعي task.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
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.