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 to zdarzenia w Twojej grze, na które możesz nasłuchiwać i na które możesz reagować. Wiele usług i obiektów w Robloxie ma wbudowane wydarzenia, które automatycznie wyzwalają się w odpowiedzi na określone działania lub zmiany.

Na przykład, gdy Character gracza dotyka BasePart, automatycznie wyzwala się wydarzenie Touched. Za każdym razem, gdy gracz dołącza do Twojej gry, wyzwala się wydarzenie Players.PlayerAdded.

Ze względu na ogromną liczbę wydarzeń i architekturę klient-serwer, skryptowanie w Robloxie często określane jest jako sterowane wydarzeniami. To podejście różni się od wielu innych silników gier, które kładą nacisk na uruchamianie kodu na zasadzie klatka po klatce.

Nie musisz nasłuchiwać na wydarzenia ani podejmować żadnych działań w odpowiedzi na nie, ale wydarzenia są wyzwalane i dostępne mimo wszystko. Kiedy chcesz zareagować na jakieś wydarzenie, łączysz z nim funkcję.

Łączenie funkcji z wydarzeniami

Łączysz funkcję z wydarzeniem za pomocą Connect(), aby wykonać kod za każdym razem, gdy wydarzenie zostanie wyzwolone. Większość wydarzeń przekazuje argumenty do swoich połączonych funkcji. Na przykład, wydarzenie BasePart.Touched przesyła obiekt, który dotknął części (np. lewą rękę lub koło samochodu), a wydarzenie Players.PlayerAdded przesyła Player, który dołączył do Twojej gry.

Poniższy przykład kodu pokazuje, jak połączyć funkcję o nazwie onPartTouched() z wydarzeniem Touched części:


-- Zakłada, że skrypt jest podpięty do części
local part = script.Parent
-- Funkcja, którą chcesz uruchomić
local function onPartTouched(object)
print("Część została dotknięta przez", object:GetFullName())
end
-- Połącz funkcję z wydarzeniem Touched części
part.Touched:Connect(onPartTouched)

Możesz również łączyć anonimowe funkcje z wydarzeniami, gdy chcesz użyć zmiennych z zakresu nadrzędnego i nie trzeba używać tej funkcji w innym miejscu. Na przykład, ten przykład kodu unika niewygodnej funkcji pośredniej z podobnego przykładu 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 wywołuje saveProgress() po usunięciu postaci
-- z gry (w tym przypadku, gdy gracz opuszcza).
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)

Rozłączanie funkcji z wydarzeniami

Metoda Connect() zwraca obiekt RBXScriptConnection. Jeśli połączysz funkcję z wydarzeniem, ale nie chcesz wywoływać tej funkcji następnym razem, gdy wydarzenie zostanie wyzwolone (np. po spełnieniu jakiegoś warunku), rozłącz ją, wywołując Disconnect() na obiekcie RBXScriptConnection.

Poniższy przykład kodu pokazuje, jak połączyć i rozłączyć funkcję z wydarzeniem Part.Touched:


local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local targetPart = Workspace.TargetPart
-- Deklaracja pustej zmiennej placeholder dla połączenia
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("Część uderzyła w cel!")
-- Rozłącz połączenie
connection:Disconnect()
end
end
-- Połącz powyższą funkcję z wydarzeniem Touched
connection = part.Touched:Connect(onPartTouched)

Czekanie na wyzwolenie wydarzeń

Jeśli chcesz, aby skrypt czekał aż konkretne wydarzenie się wyzwoli, użyj metody Wait(). Ta metoda zwraca argumenty wydarzenia, które możesz przypisać do zmiennych do późniejszego użycia:


local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local touchedPart = part.Touched:Wait()
print("Część została dotknięta przez", touchedPart:GetFullName())

Inne rodzaje wydarzeń

©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.