Événements

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Les événements sont des occurrences dans votre expérience que vous pouvez écouter et répondre.De nombreux services et objets Roblox intégrés ont des événements qui se déclenchent automatiquement en réponse à des actions ou des modifications spécifiques .

Par exemple, le toucher de Character d'un joueur sur BasePart déclenche automatiquement un événement Touched.Chaque fois qu'un joueur rejoint votre expérience, l'événement Players.PlayerAdded se déclenche.

En raison du nombre élevé d'événements et de l'architecture client-serveur, la programmation Roblox est souvent appelée événementielle .Cette approche est différente de beaucoup d'autres moteurs de jeu, qui mettent l'accent sur l'exécution du code sur une base frame par frame.

Vous n'avez pas à écouter les événements ou à prendre des mesures en réponse à eux, mais les événements sont tirés et disponibles néanmoins.Lorsque vous souhaitez répondre à un événement, vous connectez une fonction à celui-ci.

Relier les fonctions aux événements

Vous connectez une fonction à un événement en utilisant Connect() pour exécuter du code à chaque fois que l'événement se déclenche.La plupart des événements passent des arguments à leurs fonctions connectées.Par exemple, l'événement BasePart.Touched passe l'objet qui a touché la partie (comme une main gauche ou une roue de voiture), et l'événement Players.PlayerAdded passe le Player qui a rejoint votre expérience.

L'exemple de code suivant montre comment connecter une fonction nommée onPartTouched() à l'événement Touched d'une partie :


-- Prévoit que le script est associé à la partie
local part = script.Parent
-- La fonction que vous voulez lancer
local function onPartTouched(object)
print("Part was touched by", object:GetFullName())
end
-- Reliez la fonction à l'événement Touché de la partie
part.Touched:Connect(onPartTouched)

Vous pouvez également connecter fonctions anonymes aux événements lorsque vous voulez utiliser des variables dans le scope parent et que vous n'avez pas besoin d'utiliser la fonction ailleurs.Par exemple, cet échantillon de code évite la fonction d'intermédiaire maladroite de l'échantillon similaire dans Services :


local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SaveManager = require(ReplicatedStorage:WaitForChild("SaveManager"))
local function saveProgress(character)
local position = character:FindFirstChild("HumanoidRootPart").Position
SaveManager.saveData(character, position)
end
-- Fonction anonyme qui appelle saveProgress() lorsqu'un personnage est supprimé
-- de l'expérience (dans ce cas, lorsque le joueur part).
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)

Déconnecter les fonctions des événements

La méthode Connect() retourne un objet RBXScriptConnection.Si vous connectez une fonction à un événement, mais que vous ne voulez pas appeler la fonction la prochaine fois qu'un événement se déclenche (comme après que certaines conditions soient remplies), déconnectez-la en appelant sur l'objet ».

L'exemple de code suivant montre comment connecter et déconnecter une fonction de l'événement Part.Touched:


local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local targetPart = Workspace.TargetPart
-- Déclarer une variable de remplacement vide pour la connexion
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("The part hit the target!")
-- Déconnecter la connexion
connection:Disconnect()
end
end
-- Reliez la fonction ci-dessus à l'événement Touched
connection = part.Touched:Connect(onPartTouched)

Si vous voulez seulement connecter une fonction à un événement une fois — c'est-à-dire exécuter la fonction la première fois que l'événement se déclenche — utilisez la méthode Once() pour être plus pratique que de connecter et de déconnecter la fonction.

Attendez que les événements se lancer

Si vous voulez qu'un script produise jusqu'à ce qu'un événement spécifique se déclenche, utilisez la méthode Wait().Cette méthode renvoie les arguments de l'événement, que vous pouvez attribuer à des variables pour une utilisation ultérieure :


local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local touchedPart = part.Touched:Wait()
print("The part was touched by", touchedPart:GetFullName())

Autres types d'événements

  • Événements liés

    Les événements liés vous permettent de communiquer entre les scripts du même côté de la frontière client-serveur.

  • Événements à distance

    Les événements à distance vous permettent de communiquer à travers la frontière client-serveur.