Ereignisse sind Vorkommnisse in deiner Erfahrung, auf die du reagieren und reagieren kannst.Viele Roblox-Dienste und Objekte haben integrierte Ereignisse, die automatisch feuern in Reaktion auf bestimmte Aktionen oder Änderungen.
Zum Beispiel berührt der Character eines Spieler:ineinen BasePart automatisch ein Touched Event.Jedes Mal, wenn ein Spieler deiner Erlebnisbeitritt, wird das Players.PlayerAdded-Ereignis ausgelöst.
Aufgrund der großen Anzahl von Ereignissen und Client-Server-Architektur wird Roblox-Skripting oft als ereignisgesteuert bezeichnet.Dieser Ansatz unterscheidet sich von vielen anderen Spielengen, die den Ausführungscode auf einer Frame-by-Frame-Basis betonen.
Du musst nicht auf Ereignisse hören oder auf sie reagieren, aber die Ereignisse feuern und sind trotzdem verfügbar.Wenn du auf ein Ereignis antworten möchtest, verbindest du eine Funktion damit.
Funktionen mit Ereignissen verbinden
Du verbindest eine Funktion mit einem Ereignis, indem du Connect() verwendest, um jedes Mal, wenn das Ereignis ausgelöst wird, Code auszuführen.Die meisten Ereignisse übergeben Argumente zu ihren verbundenen Funktionen.Zum Beispiel übermittelt das Ereignis BasePart.Touched den Gegenstand, der das Teil berührt hat (z. B. eine linke Hand oder ein Autorad), und das Ereignis Players.PlayerAdded übermittelt den Player, der deiner Erlebnisbeigetreten ist.
Das folgende Codebeispiel zeigt, wie man eine Funktion namens onPartTouched() mit dem Touched Ereignis eines Teils verbindet:
-- Vermutet, dass das Skript dem Teil zugewiesen ist
local part = script.Parent
-- Die Funktion, die du ausführen möchtest
local function onPartTouched(object)
print("Part was touched by", object:GetFullName())
end
-- Verbinde die Funktion mit dem berührten Ereignis des Teils
part.Touched:Connect(onPartTouched)
Du kannst auch anonyme Funktionen zu Ereignissen verbinden, wenn du Variablen im Elternbereich verwenden möchtest und die Funktion nicht anderswo verwenden musst.Zum Beispiel vermeidet dieses Codebeispiel die peinliche Zwischenfunktion aus dem ähnlichen Beispiel in Diensten :
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
-- Anonyme Funktion, die saveProgress() aufruft, wenn ein Charakter entfernt wird
-- aus der erfahrung (in diesem fall, wenn der spieler geht).
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)
Funktionen von Ereignissen trennen
Die Connect()-Methode gibt ein RBXScriptConnection-Objekt zurück.Wenn du eine Funktion mit einem Ereignis verbindest, aber die Funktion nicht das nächste Mal aufrufen möchtest, wenn ein Ereignis ausgelöst wird (z. B. nachdem eine Bedingung erfüllt ist), trenne sie, indem du Disconnect() auf dem RBXScriptConnection Objekt aufrufst.
Das folgende Codebeispiel zeigt, wie man eine Funktion vom Part.Touched Ereignis verbindet und trennt:
local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local targetPart = Workspace.TargetPart
-- Erkläre eine leere Platzhaltervariable für die Verbindung
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("The part hit the target!")
-- Verbindung trennen
connection:Disconnect()
end
end
-- Verbinde die obige Funktion mit dem berührten Ereignis
connection = part.Touched:Connect(onPartTouched)
Wenn du nur einmal eine Funktion mit einem Ereignis verbinden möchtest - das heißt, nur die Funktion zum ersten Mal ausführen, wenn das Ereignis ausgelöst wird - verwende die Once()-Methode als bequemere Alternative zum Verbinden und Trennen der Funktion.
Warten auf das Auslösen von initiieren
Wenn du ein Skript haben möchtest, das bis zum Auslösen eines bestimmten Ereignisses ausgegeben wird, verwende die Wait()-Methode.Diese Methode gibt die Argumente des Ereignisses zurück, die Sie zu späteren Verwendung auf Variablen zuweisen können:
local Workspace = game:GetService("Workspace")local part = Workspace.Partlocal touchedPart = part.Touched:Wait()print("The part was touched by", touchedPart:GetFullName())
Andere Arten von Ereignissen
Bindbare Ereignisse ermöglichen es Ihnen, zwischen Skripten auf derselben Seite der Client-Server-Grenze zu kommunizieren.
Fernereignisse ermöglichen es Ihnen, über die Client-Server-Grenze zu kommunizieren.