לבני הרג
שיעור 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()
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.