فكّك كومة
الدرس 3 من 18 في دورة لعبة Roblox: محاكي الحيوانات الأليفة على Coddy.
يكسر اللاعبون الأكوام بالنقر عليها. يطلق ClickDetector داخل جزء ما حدث MouseClick على الخادم، مع اللاعب الذي نقر، عندما يكون قريبًا بما يكفي.
يُنقص كل نقرة 1 من Health الكومة. عندما تصل إلى 0، تنكسر الكومة: يحصل اللاعب على قيمة Value منها على شكل عملات، وتُدمَّر الكومة.
local health = pile:GetAttribute("Health") - 1
if health > 0 then
pile:SetAttribute("Health", health)
return
end
-- مكسوريُوصَل حدث النقر داخل spawnPile، ويستدعي hitPile، المكتوبة أدناه spawnPile. لا يمكن للدالة استخدام اسم محلي إلا إذا كان قد أُعلن عنه مسبقًا، لذا أعلن local hitPile أولًا، قبل كليهما، ثم عرّفها لاحقًا باستخدام function hitPile(player, pile).
التحدي
سهل- فوق
spawnPile، صرّح عنlocal hitPile. - في
spawnPile، أضف ClickDetector إلى الكومة واربطMouseClickالخاص به بـhitPile(player, pile). - أسفل
spawnPile، اكتبfunction hitPile(player, pile): أنقص 1 من سمة Health؛ وإذا بقيت أكبر من 0، فاحفظها وتوقّف؛ وإلا فأضف قيمة Value للكومة إلى Coins الخاصة باللاعب ودمّر الكومة.
اضغط على 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)
-- كومة عملات في أحد المواقع: نسخة من 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)
pile.Parent = piles
return pile
end
-- كومة في كل موقع في Meadow
for _, spot in workspace.Zones.Meadow.Spawns:GetChildren() do
spawnPile(spot)
end
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.