Menu
CoddyTech

Tapis roulants

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

L’étape Conveyor comporte une bande sombre, marquée Conveyor, qui te repousse dans la direction d’où tu viens. Une pièce ancrée ne bouge jamais, mais si tu lui donnes une AssemblyLinearVelocity, tout ce qui se trouve dessus est entraîné avec elle, comme sur une vraie bande.

Dans quelle direction ? Chaque pièce a une face avant, et part.CFrame.LookVector est un Vector3 d’un stud de long qui pointe vers l’extérieur. La bande a été tournée de sorte que sa face avant soit orientée vers le bas de l’allée :

part.AssemblyLinearVelocity = part.CFrame.LookVector * Settings.BeltSpeed

Utiliser la direction propre à la pièce signifie qu’un constructeur peut orienter la bande comme il le souhaite et qu’elle fonctionnera quand même, sans modifier le script.

challenge icon

Défi

Moyen

Dans setupStage, attribue à chaque pièce portant l’étiquette Conveyor une AssemblyLinearVelocity égale à son CFrame.LookVector multiplié par Settings.BeltSpeed.

Appuie sur Jouer et marche à contre-courant du tapis. Puis Vérifie.

Essayez vous-même

local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local CollectionService = game:GetService("CollectionService")
local RunService = game:GetService("RunService")
local Settings = require(game.ReplicatedStorage.Settings)

local stages = ServerStorage.Stages
local tower = nil

print("Each tower has " .. Settings.StageCount .. " stages")

-- Chaque joueur reçoit 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)

-- Tout objet portant le tag Kill met fin à une vie
local function killOnTouch(hit)
	local humanoid = hit.Parent:FindFirstChild("Humanoid")
	if humanoid then
		humanoid.Health = 0
	end
end

-- Une marche escamotable s’estompe peu après qu’un joueur y atterrit, puis réapparaît
local function makeVanish(part)
	part.Touched:Connect(function(hit)
		if part:GetAttribute("Gone") or not hit.Parent:FindFirstChild("Humanoid") then
			return
		end
		part:SetAttribute("Gone", true)
		task.wait(Settings.VanishDelay)
		part.Transparency = 0.8
		part.CanCollide = false
		task.wait(Settings.VanishTime)
		part.Transparency = 0
		part.CanCollide = true
		part:SetAttribute("Gone", nil)
	end)
end

-- Les plateformes tournantes pivotent légèrement à chaque image
RunService.Heartbeat:Connect(function(dt)
	for _, spinner in CollectionService:GetTagged("Spinner") do
		if spinner:IsDescendantOf(workspace) then
			spinner:PivotTo(spinner:GetPivot() * CFrame.Angles(0, math.rad(Settings.SpinSpeed) * dt, 0))
		end
	end
end)

-- Active chaque obstacle d’une étape selon ses tags
local function setupStage(stage)
	for _, part in stage:GetDescendants() do
		if part:HasTag("Kill") then
			part.Touched:Connect(killOnTouch)
		end
		if part:HasTag("Vanish") then
			makeVanish(part)
		end
	end
end

-- Choisis une étape 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

-- Construis 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
		setupStage(stage)
	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