Menu
CoddyTech

Blocs mortels

Leçon 4 sur 18 du cours Jeu Roblox : tour sans fin de Coddy.

Chaque parcours d’obstacles comporte des pièces rouges que tu ne dois pas toucher. Dans les niveaux, elles sont marquées avec un tag, une étiquette que tu peux attribuer à n’importe quelle instance. Les bandes rouges portent le tag Kill :

print(part:HasTag("Kill")) --> true

Les tags permettent aux grands jeux de rester simples : le créateur du niveau attribue seulement un tag à une pièce, et une fonction fait fonctionner toutes les pièces marquées. Les niveaux de ta tour sont des copies, alors configure-les après leur création. GetDescendants répertorie toutes les pièces d’un niveau, même celles qui sont profondément imbriquées :

for _, part in stage:GetDescendants() do
	if part:HasTag("Kill") then
		part.Touched:Connect(killOnTouch)
	end
end

Pour mettre fin à une vie, définis Health du Humanoid à 0. Le contact peut provenir de n’importe quoi, alors vérifie d’abord que le modèle de l’objet qui a touché possède un Humanoid. Dans cette leçon, chaque niveau est composé de KillBricks, tu peux donc essayer.

challenge icon

Défi

Facile
  1. Écris killOnTouch(hit) : si le modèle de l'objet touché possède un Humanoid, définis sa Health sur 0.
  2. Écris setupStage(stage) : pour chaque pièce dans stage:GetDescendants() portant le tag Kill, connecte son Touched à killOnTouch.
  3. Dans buildTower, appelle setupStage(stage) pour chaque étage que tu empiles.

Appuie sur Play et saute par-dessus les bandes rouges. Puis clique sur Check.

Essayez vous-même

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")

-- Chaque joueur reçoit des Wins dans le classement
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)

-- Une étape choisie au hasard
local function pickStage()
	local all = stages:GetChildren()
	return all[math.random(1, #all)]
end

-- Place une copie d’un modèle au sommet de la tour ; renvoie la copie et la nouvelle hauteur du sommet
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

-- Construit une nouvelle tour aléatoire, de bas en haut
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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Jeu Roblox : tour sans fin