الكتل القاتلة
الدرس 4 من 18 في دورة لعبة Roblox: البرج اللانهائي على Coddy.
في كل لعبة عوائق أجزاء حمراء يجب ألا تلمسها. في المراحل، تُميَّز بوسم وسم، وهو تسمية يمكنك وضعها على أي كائن. تحمل الشرائط الحمراء الوسم Kill:
print(part:HasTag("Kill")) --> trueالأوسمة هي ما يجعل الألعاب الكبيرة بسيطة: منشئ المرحلة يضع وسمًا على جزء فقط، ودالة واحدة تجعل كل جزء موسوم يعمل. مراحل برجك نسخ، لذا أعدّها بعد إنشائها. تعرض GetDescendants كل جزء داخل المرحلة، مهما كان عمقه:
for _, part in stage:GetDescendants() do
if part:HasTag("Kill") then
part.Touched:Connect(killOnTouch)
end
endلإنهاء حياة، عيّن Health الخاص بـ Humanoid إلى 0. قد تأتي اللمسة من أي شيء، لذا تحقق أولًا من أن نموذج الجسم الملامس يحتوي على Humanoid. في هذا الدرس، كل مرحلة تتكون من KillBricks، لذا يمكنك تجربة ذلك.
التحدي
سهل- اكتب
killOnTouch(hit): إذا كان نموذج الكائن الذي لمس الجزء يحتوي على Humanoid، فاضبط Health الخاص به على 0. - اكتب
setupStage(stage): لكل جزء فيstage:GetDescendants()يحمل الوسمKill، اربطTouchedالخاص به بـkillOnTouch. - في
buildTower، استدعِsetupStage(stage)لكل مرحلة تكدّسها.
اضغط على Play واقفز فوق الشرائط الحمراء. ثم اضغط على Check.
جرّب بنفسك
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)
local stages = ServerStorage.Stages
local tower = nil
print("Each tower has " .. Settings.StageCount .. " stages")
-- يحصل كل لاعب على Wins في لوحة المتصدرين
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local wins = Instance.new("IntValue")
wins.Name = "Wins"
wins.Parent = leaderstats
end)
-- مرحلة عشوائية من بين جميع المراحل
local function pickStage()
local all = stages:GetChildren()
return all[math.random(1, #all)]
end
-- ضع نسخة من نموذج فوق البرج؛ تُرجع النسخة والقمة الجديدة
local function stack(template, bottom)
local copy = template:Clone()
local box, size = copy:GetBoundingBox()
local lift = bottom - (box.Position.Y - size.Y / 2)
copy:PivotTo(copy:GetPivot() + Vector3.new(0, lift, 0))
copy.Parent = tower
return copy, bottom + size.Y
end
-- ابنِ برجًا عشوائيًا جديدًا من الأسفل إلى الأعلى
local function buildTower()
tower = Instance.new("Model")
tower.Name = "Tower"
tower.Parent = workspace
local top = 0
for i = 1, Settings.StageCount do
local stage, newTop = stack(pickStage(), top)
top = newTop
end
stack(ServerStorage.Finish, top)
end
buildTower()
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.