Comment gérer un part de pouvoir aléatoire : Aléatoirement, le part change de couleur et peut être traversé pour acquérir un pouvoir puis redevient compact sans laisser la possibilité d’acquérir un nouveau pouvoir.
Comprendre comment utiliser TweenService pour animer une partie (Part) dans Roblox, en changeant sa transparence, sa couleur, et ses propriétés physiques (comme CanCollide et CanTouch).

-- Récupérer le dossier et la partie "PowerPart" dans le Workspace
local powersFolder = workspace:WaitForChild("PowersFolder")
local powerPart = powersFolder:WaitForChild("PowerPart")
-- Variable pour contrôler l'exécution de la boucle (non utilisée ici, mais utile pour arrêter le script si besoin)
local isPowerActive = true
local POWER_DURATION = 5 -- Durée de l'animation "power" (en secondes)
local MAX_WITHOUT_POWER_DURATION = 10 -- Durée maximale entre deux activations (en secondes)
local MIN_WITHOUT_POWER_DURATION = 3 -- Durée minimale entre deux activations (en secondes)
-- Boucle infinie pour activer l'animation aléatoirement
task.spawn(function()
while isPowerActive do
-- Attendre un temps aléatoire entre MIN_WITHOUT_POWER_DURATION et MAX_WITHOUT_POWER_DURATION
task.wait(math.random(MIN_WITHOUT_POWER_DURATION, MAX_WITHOUT_POWER_DURATION))
-- Inverser les propriétés CanCollide et CanTouch
powerPart.CanCollide = not powerPart.CanCollide
powerPart.CanTouch = not powerPart.CanCollide
-- Attendre que l'animation soit terminée
task.wait(POWER_DURATION)
-- Réactiver les collisions et le toucher
powerPart.CanCollide = not powerPart.CanCollide
powerPart.CanTouch = not powerPart.CanCollide
end
end)
-- Détecter quand un joueur touche la partie
powerPart.Touched:Connect(function(hit)
print("La partie PowerPart a été touchée !")
end)
Boucle infinie pour activer l’animation aléatoirement
task.spawn(function() ... end): Crée une nouvelle tâche (thread) pour exécuter la boucle sans bloquer le reste du script.while isPowerActive do ... end: Boucle infinie (tant queisPowerActiveesttrue).task.wait(math.random(MIN_WITHOUT_POWER_DURATION, MAX_WITHOUT_POWER_DURATION)):- Attend un temps aléatoire entre
MIN_WITHOUT_POWER_DURATION(3 secondes) etMAX_WITHOUT_POWER_DURATION(10 secondes).
- Attend un temps aléatoire entre
powerPart.CanCollide = not powerPart.CanCollide:- Inverse la valeur de
CanCollide(si c’étaittrue, ça devientfalse, et vice versa).
- Inverse la valeur de
task.wait(POWER_DURATION): Temps d’action du pouvoir- Réactivation des propriétés :
- Après la fin de l’animation, on réactive
CanCollideetCanTouch.
- Après la fin de l’animation, on réactive
Ajouter dans cette partie de code le pouvoir à donner au joueur :
-- Détecter quand un joueur touche la partie
powerPart.Touched:Connect(function(hit)
print("La partie PowerPart a été touchée !")
end)
Création de l’animation avec TweenService
La part change de couleur lorsque le pouvoir est possible :
-- Récupérer le dossier et la partie "PowerPart" dans le Workspace
local powersFolder = workspace:WaitForChild("PowersFolder")
local powerPart = powersFolder:WaitForChild("PowerPart")
-- Variable pour contrôler l'exécution de la boucle (non utilisée ici, mais utile pour arrêter le script si besoin)
local isPowerActive = true
-- Service pour créer des animations fluides
local TweenService = game:GetService("TweenService")
-- Durées et couleurs pour les animations
local POWER_DURATION = 5 -- Durée de l'animation "power" (en secondes)
local MAX_WITHOUT_POWER_DURATION = 10 -- Durée maximale entre deux activations (en secondes)
local MIN_WITHOUT_POWER_DURATION = 3 -- Durée minimale entre deux activations (en secondes)
local POWER_COLOR = Color3.fromRGB(0, 255, 0) -- Couleur verte pour l'état "power"
local NO_POWER_COLOR = Color3.fromRGB(255, 0, 0) -- Couleur rouge pour l'état "sans power"
-- Configurer la partie "PowerPart"
powerPart.Anchored = true -- Empêcher la partie de bouger
powerPart.Transparency = 0 -- Rendre la partie complètement opaque
powerPart.CanCollide = true -- Permettre les collisions avec la partie
powerPart.CanTouch = true -- Permettre de détecter les touches sur la partie
powerPart.Color = NO_POWER_COLOR -- Couleur initiale (rouge)
-- Créer une animation (Tween) pour la partie
-- Cette animation change la transparence, la couleur et désactive les collisions
local powerTween = TweenService:Create(
powerPart, -- Objet à animer
TweenInfo.new(
POWER_DURATION, -- Durée de l'animation
Enum.EasingStyle.Linear, -- Style d'animation (linéaire)
Enum.EasingDirection.InOut, -- Direction de l'animation (aller-retour)
0, -- Nombre de répétitions (0 = une seule fois)
true -- Joue l'animation en boucle (inversée)
),
{
Transparency = 0.8, -- La partie devient semi-transparente
CanCollide = false, -- Désactive les collisions
Color = POWER_COLOR -- Change la couleur en vert
}
)
-- Boucle infinie pour activer l'animation aléatoirement
task.spawn(function()
while isPowerActive do
-- Attendre un temps aléatoire entre MIN_WITHOUT_POWER_DURATION et MAX_WITHOUT_POWER_DURATION
task.wait(math.random(MIN_WITHOUT_POWER_DURATION, MAX_WITHOUT_POWER_DURATION))
-- Jouer l'animation
powerTween:Play()
-- Inverser les propriétés CanCollide et CanTouch
powerPart.CanCollide = not powerPart.CanCollide
powerPart.CanTouch = not powerPart.CanCollide
-- Attendre que l'animation soit terminée
powerTween.Completed:Wait()
-- Réactiver les collisions et le toucher
powerPart.CanCollide = not powerPart.CanCollide
powerPart.CanTouch = not powerPart.CanCollide
end
end)
-- Détecter quand un joueur touche la partie
powerPart.Touched:Connect(function(hit)
print("La partie PowerPart a été touchée !")
end)
Configuration de la PowerPart
La PowerPart est configurée avec les propriétés suivantes :
Anchored = true: Empêche la partie de bouger (elle reste fixe dans le monde).Transparency = 0: La partie est complètement opaque (visible à 100%).CanCollide = true: Les joueurs et objets peuvent entrer en collision avec la partie.CanTouch = true: La partie peut détecter les touches (pour l’événementTouched).Color = NO_POWER_COLOR: La couleur initiale est rouge (état « sans power »).
Création de l’animation avec TweenService
TweenService permet de créer des animations fluides pour modifier les propriétés d’un objet sur une durée donnée.
Paramètres de TweenService:Create :
- Objet à animer :
powerPart(la partie à animer). TweenInfo.new: Définit les propriétés de l’animation :- Durée :
POWER_DURATION(5 secondes). - Style :
Enum.EasingStyle.Linear(animation linéaire, vitesse constante). - Direction :
Enum.EasingDirection.InOut(l’animation va et vient). - Répétitions :
0(une seule fois, maistruepour l’inverser à la fin). - Boucle inversée :
true(l’animation se joue en boucle aller-retour).
- Durée :
- Propriétés à animer :
Transparency = 0.8: La partie devient semi-transparente.CanCollide = false: Désactive les collisions pendant l’animation.Color = POWER_COLOR: Change la couleur en vert.
QCM : Teste ta compréhension !
Sur les variables et la configuration :
- À quoi sert
powerPart.Anchored = true?- a) À empêcher la partie de bouger.
- b) À rendre la partie invisible.
- c) À changer la couleur de la partie.
- Que fait
powerPart.Transparency = 0?- a) Rend la partie complètement opaque.
- b) Rend la partie complètement transparente.
- c) Rend la partie rouge.
Sur TweenService :
- À quoi sert
TweenService?- a) À créer des animations fluides pour les objets.
- b) À jouer des sons.
- c) À détecter les collisions.
- Que fait
TweenInfo.new(5, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut, 0, true)?- a) Crée une animation de 5 secondes, linéaire, aller-retour, qui se joue une fois en boucle inversée.
- b) Crée une animation instantanée.
- c) Supprime l’objet après 5 secondes.
- Quelles propriétés sont animées dans ce script ?
- a)
Transparency,CanCollide, etColor. - b)
SizeetPosition. - c)
NameetMaterial.
- a)
Sur la boucle et les événements :
- Pourquoi utilise-t-on
task.spawn(function() ... end)?- a) Pour exécuter la boucle sans bloquer le reste du script.
- b) Pour arrêter le script.
- c) Pour créer un nouveau joueur.
- Que fait
math.random(MIN_WITHOUT_POWER_DURATION, MAX_WITHOUT_POWER_DURATION)?- a) Génère un nombre aléatoire entre
MIN_WITHOUT_POWER_DURATIONetMAX_WITHOUT_POWER_DURATION. - b) Attend exactement 5 secondes.
- c) Désactive la partie.
Réponse : a)
- a) Génère un nombre aléatoire entre
- Que fait
powerPart.Touched:Connect(function(hit) ... end)?- a) Exécute une fonction quand un objet touche la
PowerPart. - b) Change la taille de la
PowerPart. - c) Supprime la
PowerPart.
- a) Exécute une fonction quand un objet touche la
- Pourquoi inverse-t-on
CanCollideetCanTouchdans la boucle ?- a) Pour alterner entre un état où la partie est solide/touchable et un état où elle ne l’est pas.
- b) Pour changer la couleur de la partie.
- c) Pour supprimer la partie.
Changer la taille de la partie pendant l’animation
- Objectif : Faire grandir ou rétrécir la
PowerPartpendant l’animation. - Comment faire ?
- Ajoute
Size = Vector3.new(10, 10, 10)dans les propriétés duTween:luaCopier
- Ajoute
-- Récupérer le dossier et la partie "PowerPart" dans le Workspace
local powersFolder = workspace:WaitForChild("PowersFolder")
local powerPart = powersFolder:WaitForChild("PowerPart")
-- Variable pour contrôler l'exécution de la boucle (non utilisée ici, mais utile pour arrêter le script si besoin)
local isPowerActive = true
-- Service pour créer des animations fluides
local TweenService = game:GetService("TweenService")
-- Durées et couleurs pour les animations
local POWER_DURATION = 5 -- Durée de l'animation "power" (en secondes)
local MAX_WITHOUT_POWER_DURATION = 10 -- Durée maximale entre deux activations (en secondes)
local MIN_WITHOUT_POWER_DURATION = 3 -- Durée minimale entre deux activations (en secondes)
local POWER_COLOR = Color3.fromRGB(0, 255, 0) -- Couleur verte pour l'état "power"
local NO_POWER_COLOR = Color3.fromRGB(255, 0, 0) -- Couleur rouge pour l'état "sans power"
-- Configurer la partie "PowerPart"
powerPart.Anchored = true -- Empêcher la partie de bouger
powerPart.Transparency = 0 -- Rendre la partie complètement opaque
powerPart.CanCollide = true -- Permettre les collisions avec la partie
powerPart.CanTouch = true -- Permettre de détecter les touches sur la partie
powerPart.Color = NO_POWER_COLOR -- Couleur initiale (rouge)
-- Créer une animation (Tween) pour la partie
-- Cette animation change la transparence, la couleur et désactive les collisions
local powerTween = TweenService:Create(
powerPart, -- Objet à animer
TweenInfo.new(
POWER_DURATION, -- Durée de l'animation
Enum.EasingStyle.Linear, -- Style d'animation (linéaire)
Enum.EasingDirection.InOut, -- Direction de l'animation (aller-retour)
0, -- Nombre de répétitions (0 = une seule fois)
true -- Joue l'animation en boucle (inversée)
),
{
Transparency = 0.8, -- La partie devient semi-transparente
CanCollide = false, -- Désactive les collisions
Color = POWER_COLOR,
Size = Vector3.new(powerPart.Size.X + 10, powerPart.Size.Y + 10, powerPart.Size.Z)
}
)
-- Boucle infinie pour activer l'animation aléatoirement
task.spawn(function()
while isPowerActive do
-- Attendre un temps aléatoire entre MIN_WITHOUT_POWER_DURATION et MAX_WITHOUT_POWER_DURATION
task.wait(math.random(MIN_WITHOUT_POWER_DURATION, MAX_WITHOUT_POWER_DURATION))
-- Jouer l'animation
powerTween:Play()
-- Inverser les propriétés CanCollide et CanTouch
powerPart.CanCollide = not powerPart.CanCollide
powerPart.CanTouch = not powerPart.CanCollide
-- Attendre que l'animation soit terminée
powerTween.Completed:Wait()
-- Réactiver les collisions et le toucher
powerPart.CanCollide = not powerPart.CanCollide
powerPart.CanTouch = not powerPart.CanCollide
end
end)
-- Détecter quand un joueur touche la partie
powerPart.Touched:Connect(function(hit)
print("La partie PowerPart a été touchée !")
end)
