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ą incydentami w twoim doświadczeniu, na które możesz reagować i słuchać.Wiele usług i obiektów Roblox ma wbudowane wydarzenia, które automatycznie strzelają w odpowiedzi na określone działania lub zmiany.

Na przykład, dotknięcie gracza Character przez BasePart automatycznie uruchamia wydarzenie Touched.Za każdym razem, gdy gracz dołącza do twojego doświadczenia, uruchamia się wydarzenie Players.PlayerAdded.

Ze względu na ogromną liczbę wydarzeń i architekturę klient-serwer, programowanie w Roblox jest często określane jako event-driven .Ta metoda różni się od wielu innych silników gier, które podkreślają uruchamianie kodu na podstawie ram po ramie.

Nie musisz słuchać wydarzeń lub podejmować żadnych działań w odpowiedzi na nie, ale wydarzenia są strzelane i dostępne mimo to.Kiedy chcesz odpowiedzieć na wydarzenie, połącz funkcję z nim.

Połącz funkcje z wydarzeniami

Połączysz funkcję z wydarzeniem za pomocą Connect(), aby każdorazowo wykonywać kod, gdy wydarzenie się zapala.Większość wydarzeń przekazuje argumenty do połączonych funkcji.Na przykład, wydarzenie BasePart.Touched przekazuje obiekt, który dotknął części (taki jak lewa ręka lub koło samochodu), a wydarzenie Players.PlayerAdded przekazuje Player, które dołączyło do twojego doświadczenia.

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


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

Możesz również połączyć funkcje anonimowe z wydarzeniami, gdy chcesz używać zmiennych w zakresie rodzica i nie musisz używać funkcji gdzie indziej.Na przykład ten przykład kodu unika niezręcznej funkcji pośredniczącej 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 wzywa saveProgress() po usunięciu postaci
-- z doświadczenia (w tym przypadku, gdy gracz odchodzi).
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)

Odłącz funkcje od wydarzeń

Metoda Connect() zwraca obiekt RBXScriptConnection.Jeśli połączysz funkcję z wydarzeniem, ale nie chcesz wzywać funkcji za następnym razem, gdy wystrzeli się wydarzenie (na przykład po spełnieniu pewnego warunku), odłącz ją, wzywając na obiekcie >.

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


local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local targetPart = Workspace.TargetPart
-- Oświadcz pustą zmienną placeholder 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 Touched
connection = part.Touched:Connect(onPartTouched)

Jeśli chcesz połączyć funkcję z wydarzeniem tylko raz - to znaczy, uruchomić funkcję tylko za pierwszym razem, gdy wystrzeliwuje się wydarzenie - użyj metody Once() jako bardziej wygodnej alternatywy do połączenia i odłączenia funkcji.

Poczekaj na uruchomienie wydarzeń

Jeśli chcesz, aby skrypt wykonywał się do czasu wystrzelenia określonego wydarzenia, użyj metody Wait().Ta metoda zwraca argumenty wydarzenia, które możesz przypisać zmiennym na późniejsze użycie:


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

Inne rodzaje wydarzeń

  • Wydarzenia przypisywalne

    Wydarzenia wiązalne pozwalają komunikować się między skryptami na tej samej stronie granicy klienta-serwera.

  • Wydarzenia zdalne

    Wydarzenia zdalne pozwalają komunikować się przez granicę klient-serwer.