Le Tourniquet
Leçon 5 sur 18 du cours Jeu Roblox : tour sans fin de Coddy.
L’étape Spinner comporte un bras rouge qui balaie la passerelle. C’est un Model, avec le tag Spinner, dont le pivot se trouve au niveau de son moyeu. Faire tourner l’ensemble du Model légèrement à chaque image le fait tourner.
RunService.Heartbeat se déclenche une fois par image et transmet dt, le nombre de secondes écoulées depuis la dernière image (environ 1/60). Tourner de speed * dt à chaque image revient à tourner de speed chaque seconde, quelle que soit la vitesse d’exécution du jeu.
Un CFrame correspond à une position et une rotation. La multiplication par CFrame.Angles applique une rotation, et les angles sont en radians ; convertis donc les degrés avec math.rad :
spinner:PivotTo(spinner:GetPivot() * CFrame.Angles(0, math.rad(90) * dt, 0))CollectionService:GetTagged("Spinner") répertorie tous les éléments portant ce tag, y compris les modèles dans ServerStorage. Fais donc tourner uniquement ceux qui se trouvent dans le workspace. Le bras porte le tag Kill, il met donc déjà fin à une vie. Dans cette leçon, chaque étape est un Spinner.
Défi
Moyen- Vers le haut du script, récupère
CollectionServiceetRunServiceavecgame:GetService. - Connecte
RunService.Heartbeat. À chaque image, pour chaque Model étiquetéSpinnerqui se trouve dans le workspace, fais-le pivoter deCFrame.Angles(0, math.rad(Settings.SpinSpeed) * dt, 0).
Appuie sur Play et synchronise ta course pour passer devant le bras, ou saute par-dessus. 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)
-- Tout élément 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
-- Active tous les obstacles d’une étape selon leurs tags
local function setupStage(stage)
for _, part in stage:GetDescendants() do
if part:HasTag("Kill") then
part.Touched:Connect(killOnTouch)
end
end
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
setupStage(stage)
end
stack(ServerStorage.Finish, top)
end
buildTower()
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
2Obstacles
Le Tourniquet