Menu
CoddyTech

לבני הרג

שיעור 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, אז אפשר לנסות.

challenge icon

אתגר

קל
  1. כתבו killOnTouch(hit): אם למודל של מי שנגע בחלק יש Humanoid, הגדירו את Health שלו ל־0.
  2. כתבו setupStage(stage): עבור כל חלק בתוך stage:GetDescendants() שמתויג ב־Kill, חברו את Touched שלו ל־killOnTouch.
  3. בתוך 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()
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה משחק Roblox: מגדל אינסופי