Catégories
Jeu vidéo ROBLOX ROBLOX-NIVEAU01

Part de pouvoir aléatoire

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 que isPowerActive est true).
  • task.wait(math.random(MIN_WITHOUT_POWER_DURATION, MAX_WITHOUT_POWER_DURATION)) :
    • Attend un temps aléatoire entre MIN_WITHOUT_POWER_DURATION (3 secondes) et MAX_WITHOUT_POWER_DURATION (10 secondes).
  • powerPart.CanCollide = not powerPart.CanCollide :
    • Inverse la valeur de CanCollide (si c’était true, ça devient false, et vice versa).
  • 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 CanCollide et CanTouch.

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énement Touched).
  • 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 :
  1. Objet à animer : powerPart (la partie à animer).
  2. 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, mais true pour l’inverser à la fin).
    • Boucle inversée : true (l’animation se joue en boucle aller-retour).
  3. 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 :

  1. À quoi sert powerPart.Anchored = true ?
    • a) À empêcher la partie de bouger.
    • b) À rendre la partie invisible.
    • c) À changer la couleur de la partie.
  1. 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 :

  1. À quoi sert TweenService ?
    • a) À créer des animations fluides pour les objets.
    • b) À jouer des sons.
    • c) À détecter les collisions.
  1. 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.
  1. Quelles propriétés sont animées dans ce script ?
    • a) Transparency, CanCollide, et Color.
    • b) Size et Position.
    • c) Name et Material.

Sur la boucle et les événements :

  1. 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.
  1. Que fait math.random(MIN_WITHOUT_POWER_DURATION, MAX_WITHOUT_POWER_DURATION) ?
    • a) Génère un nombre aléatoire entre MIN_WITHOUT_POWER_DURATION et MAX_WITHOUT_POWER_DURATION.
    • b) Attend exactement 5 secondes.
    • c) Désactive la partie.
      Réponse : a)
  1. 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.
  1. Pourquoi inverse-t-on CanCollide et CanTouch dans 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 PowerPart pendant l’animation.
  • Comment faire ?
    • Ajoute Size = Vector3.new(10, 10, 10) dans les propriétés du Tween :luaCopier
-- 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)