Ereignisse sind Ereignisse innerhalb deines Erlebnisses, auf die du zuhören und darauf reagieren kannst. Viele Roblox-Dienste und -Objekte haben integrierte Ereignisse, die automatisch Feuer auslösen, um auf spezifische Aktionen oder Änderungen zu reagieren.
Zum Beispiel, wenn ein Spieler:inseine Character berührt, der eine BasePart berührt, wird automatisch ein Touched -Ereignis ausgelöst. Jedes Mal, wenn ein Spieler deinem Erlebnis beitritt, wird das 1> Class.Players.PlayerAdded1> -Ereignis ausgelöst.
Aufgrund der großen Anzahl von Ereignissen und Client-Server-Architektur wird Roblox-Skripts oft als ereignisgesteuert bezeichnet. Dieser Ansatz unterscheidet sich von vielen anderen SpielEngine, die auf einer Frame-by-Frame-Basis Code ausführen.
Du musst nicht auf Ereignisse hören oder irgendwelche Aktion darauf reagieren, aber die Ereignisse werden ausgelöst und sind trotzdem verfügbar. Wenn du auf ein Ereignis antworten möchtest, verbindest du eine Funktion mit dem Ereignis.
Funktionen mit Ereignissen verbinden
Du verbindest eine Funktion mit einem Ereignis mit Connect(), um Code jedes Mal auszuführen, wenn das Ereignis feuert. Die meisten Ereignisse geben Argumente an ihre verbundenen Funktionen weiter. Zum Beispiel gibt das BasePart.Touched
Das folgende Codebeispiel zeigt, wie man eine Funktion namens onPartTouched() mit dem Touched Ereignis einer Teil anbindet:
-- Nimmt an, dass das Skript der Tochterfirma zugewiesen ist
local part = script.Parent
-- Die Funktion, die Sie ausführen möchten
local function onPartTouched(object)
print("Part was touched by", object:GetFullName())
end
-- Verbinde die Funktion mit dem Ereignis "Berührt" der Teil
part.Touched:Connect(onPartTouched)
Sie können auch anonyme Funktionen an Ereignisse anschließen, wenn Sie Variablen im Eltern-Zugriff verwenden und sie nicht an anderen Orten verwenden möchten. Zum Beispiel vermeiden diese Codebeispiel die unangenehme Intermediary-Funktion 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 Veranstaltungen abbinden
Die Methode Connect() gibt ein RBXScriptConnection-Objekt zurück. Wenn Sie eine Funktion an ein Ereignis anschließen, aber nicht möchten, dass die Funktion beim nächsten Mal, wenn ein Ereignis ausgelöst wird, ausgeführt wird (z. B. nach dem Erf
Das folgende Codebeispiel zeigt, wie man eine Funktion vom Part.Touched Ereignis verbindet und abbindet:
local part = workspace.Part
local targetPart = workspace.TargetPart
-- Erkläre eine leere Platzhal变수 für die Verbindung
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("The part hit the target!")
-- Verbindung abbrechen
connection:Disconnect()
end
end
-- Verbinden Sie die obige Funktion mit dem Ereignis "Berührt"
connection = part.Touched:Connect(onPartTouched)
Wenn Sie nur eine Funktion zu einem Ereignis nur einmal verbinden möchten - das ist, nur die Funktion das erste Mal, dass das Ereignis feuert - verwenden Sie die Methode Datatype.RBXScriptSignal.Once()|Once() als eine praktischere Alternative zum Verbinden und Entfernen der Funktion.
Warten auf den Feuer von Ereignissen
Wenn Sie ein Skript so wollen, bis ein bestimmtes Ereignis feuert, verwenden Sie die Methode Wait(). Diese Methode gibt die Argumente des Ereignisses zurück, die Sie Variablen für spätere Verwendung zuweisen können:
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 der gleichen Seite der Client-Server-Grenze zu kommunizieren.
Remote-Ereignisse ermöglichen es Ihnen, über die Client-Server-Grenze zu kommunizieren.