Les événements sont des occurrences dans votre expérience que vous pouvez écouter et répondre à. Beaucoup de services et d'objets Roblox ont des événements intégrés qui déclenchent automatiquement feu en réponse à des actions ou des modifications spécifiques.
Par exemple, un joueur touché par un Character touchant un BasePart tire automatiquement un événement Touched. Chaque fois qu'un joueur rejoint votre expérience, l'événement 1> Class.Players.PlayerAdded1> se déclenche.
En raison du nombre important d'événements et d'architectures client-serveur, le scripting Roblox est souvent référencé comme événement-basé . Cette approche est différente de nombreux autres moteurs de jeu, qui soulignent l'exécution du code sur une base de cadre par cadre.
Vous n'avez pas à écouter pour des événements ou à prendre une action en réponse à eux, mais les événements sont en train de se déclencher et sont disponibles néanmoins. Lorsque vous voulez répondre à un événement, vous connectez une fonction à lui.
Connecter 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'expérience
L'exemple de code suivant montre comment connecter une fonction nommée onPartTouched() à l'événement Touched d'une partie :
-- Assume que le script est associé à la partie
local part = script.Parent
-- La fonction que vous souhaitez lancer
local function onPartTouched(object)
print("Part was touched by", object:GetFullName())
end
-- Connectez la fonction à l'événement Touched de la pièce
part.Touched:Connect(onPartTouched)
Vous pouvez également connecter fonctions anonymes à des événements lorsque vous voulez utiliser des variables dans le champ parent et n'avez pas besoin d'utiliser la fonction ailleurs. Par exemple, ce code de script évite la fonction d'intermédiaire gênante du même échantillon 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 quitte).
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)
Déconnecter les fonctions des événements
La méthode Connect() renvoie 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 (par exemple, après que certaines conditions soient remplies), désactivez-la
L'exemple de code suivant montre comment connecter et dés连接 une fonction à l'événement Part.Touched :
local part = workspace.Part
local targetPart = workspace.TargetPart
-- Déclarez une variable de masque vide pour la connexion
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("The part hit the target!")
-- Déconnectez la connexion
connection:Disconnect()
end
end
-- Connectez la fonction ci-dessus à l'événement Touched
connection = part.Touched:Connect(onPartTouched)
Si vous souhaitez seulement connecter une fonction à un événement une fois — c'est-à-dire seulement exécuter la fonction la première fois que l'événement se déclenche — utilisez la méthode Datatype.RBXScriptSignal.Once()|Once() comme alternative plus conviviale pour connecter et dés连接 la fonction.
En attente des événements pour se déclencher
Si vous souhaitez qu'un script génère jusqu'à ce qu'un événement spécifique se déclenche, utilisez la méthode Wait(). Ce méthode renvoie les arguments de l'événement, que vous pouvez attribuer à des variables pour une utilisation ultérieure :
local part = workspace.Partlocal touchedPart = part.Touched:Wait()print("The part was touched by", touchedPart:GetFullName())
Autres types d'événements
Les événements liables vous permettent de communiquer entre les scripts sur le même côté de la frontière client-serveur.
Les événements à distance vous permettent de communiquer à travers la frontière client-serveur.