Wydarzenia

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Wydarzenia są zdarzeniami w Twoim doświadczeniu, które możesz słuchać i odpowiadać na. Wiele usług i obiektów Roblox ma wbudowane wydarzenia, które automatycznie palą w odpowiedzi na określone działania lub zmiany.

Na przykład, gracz dotyka Character dotykając BasePart automatycznie wysyłając Touched wydarzenie. Każdym razem, gdy gracz dołącza do twojego doświadczenia, wydarzenie 1> Class.Players.PlayerAdded1> jest włączone.

Ze względu na ogromną liczbę wydarzeń i architektur klient-serwer, kodowanie Roblox jest często określane jako event-driven . Ten podejście jest inny od wielu innych silników gier, które akcentują uruchomienie kodu na bazie klatki bajecznej.

Nie musisz słuchać wydarzeń ani podejmować żadnej akcji w odpowiedzi na nie, ale wydarzenia się wstrzymać i są dostępne mimo to. Gdy chcesz odpowiedzieć na wydarzenie, połącz funkcję z nim.

Łączenie Funkcji z Wydarzeniami

Połączesz funkcję z wydarzeniem używając Connect(), aby wykonać kod za każdym razem, gdy wydarzenie się uruchdza. Większość wydarzeń przekazuje argumenty swoim powiązanym funkcjom. Na przykład, wydarzenie

Poniższy kod przykładowy pokazuje, jak połączyć funkcję nazyającą się onPartTouched() z wydarzeniem Touched części:


-- Zakłada, że skrypt jest powiązany z częścią
local part = script.Parent
-- Funkcję, którą chcesz uruchomić
local function onPartTouched(object)
print("Part was touched by", object:GetFullName())
end
-- Połącz funkcję z wydarzeniem dotyku części
part.Touched:Connect(onPartTouched)

Możesz również połączyć anonimowe funkcje z wydarzeniami, gdy chcesz użyć zmienne w obszarze rodzicielskim i nie musisz używać funkcji w innym miejscu. Na przykład ten kod przykładu unika nieprzyjemnej funkcji pośrednika w podobnym przykładzie w usługach :


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
-- Anonimowa funkcja, która wzywa saveProgress() gdy postać jest usunięta
-- z doświadczenia (w tym przypadku, gdy gracz opuści).
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)

Rozłączanie funkcji od wydarzeń

Methode Connect() zwraca obiekt RBXScriptConnection. Jeśli połączysz funkcję z wydarzeniem, ale nie chcesz wzywać funkcji w następnym czasie uruchomienia wydarzenia (jak po spełnieniu pewnego warunku),

Poniższy kod pokazuje, jak połączyć i odłączyć funkcję od wydarzenia Part.Touched :


local part = workspace.Part
local targetPart = workspace.TargetPart
-- Oświadcz pustą zmienną zapisu ustawień dla połączenia
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("The part hit the target!")
-- Rozłącz połączenie
connection:Disconnect()
end
end
-- Połącz powyższą funkcję z wydarzeniem dotykowym
connection = part.Touched:Connect(onPartTouched)

Jeśli chcesz połączyć funkcję z wydarzeniem tylko raz - to jest, tylko uruchom funkcję po raz pierwszy, gdy wydarzenie się uruchdza - użyj metody Datatype.RBXScriptSignal.Once()|Once() jako bardziej wygodnej alternatywy do połączenia i odłączenia funkcji.

Oczekiwanie na wydarzenia

Jeśli chcesz, aby skrypt zwrócił do momentu uruchomienia określonego wydarzenia, użyj metody Wait(). Ta metoda zwraca argumenty wydarzenia, które możesz przypisać zmienne dla późniejszego użycia:


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

Inne rodzaje wydarzeń

  • Wydarzenia wiążące się

    Związane wydarzenia umożliwiają komunikację między skryptami na tej samej stronie granicy klienta-serwera.

  • Wydarzenia zdalne

    Zdalne wydarzenia umożliwiają komunikację przez granicę klienta-serwera.