Związane wydarzenia i wezwania

*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.

Obiekty Class.BindableEvent i Class.BindableFunction pozwalają ci wiązać zachowania między skryptami na tej samej stronie i na granicy klienta-serwera i komunikować określony pożądany wynik dla działań w trybie wdrożeniowym.

Najczęstszym przypadkiem użycia wiążących wydarzeń jest dla doświadczeń, które mają strukturę opartą na rundach. Na przykład możesz mieć wydarzenie "match started", które umożliwia innym skryptom uruchomienie kalendarza i wyświetlenie tabeli ranking, a następnie "match ended", aby umożliwić innym skryptom znalezienie czasu i wyświetlenie zwycięzców.

Ponieważ koordynują one działania między skryptami, wiążące się wydarzenia są zwykle używane na serwerze, ale możesz je również użyć na klienta.

W zależności od tego, jak Twoja wrażliwość działa, możliwe jest związanie więcej wydarzeń, aby uczynić swój kod bardziej modułowy, ale skrypciki modułowe są często lepszym rozwiązaniem dla sytuacji, w których musisz dzielić się danymi między skryptami. Możesz również używać skrypcików modułowych w połączeniu z modułowymi skryptami dla

Związane wydarzenia

Przedmiot BindableEvent umożliwia wysyłanie niestandardowych wydarzeń poprzez asynchroniczną komunikację jednokierunkową między skryptami.

Gdy wyrzucasz BindableEvent za pośrednictwem metody Fire(), skrypt wyrzucania nie wytwarza wyniku, a funkcja docelowa otrzymuje przekazane argumenty z pewnymi ograniczeniami . Tak jak wszystkie wydarzenia, 1>

Aby utworzyć nowy BindableEvent używając okna Explorer w Studio:

  1. Przytrzymaj kursor nad kontenerem, do którego chcesz wstawić BindableEvent. Zalecamy używanie ServerScriptService dla komunikacji między serwerowymi skryptami i ReplicatedStorage dla komunikacji między klientami.
  2. Kliknij przycisk , który pojawia się po prawej stronie nazwy kontenera i wpisz instancję BindableEvent .
  3. Zmień nazwę instancji na TestBindableEvent .

Po utworzeniu BindableEvent połącz funkcję z jej wydarzeniem Event w jednym skrypcie, a następnie Fire() wydarzeniem z innego skrypcu.

Połączenie wątku

local ServerScriptService = game:GetService("ServerScriptService")
-- Zdobądź odniesienie do instancji instancja
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
-- Połącz anonimową funkcję z wydarzeniem
bindableEvent.Event:Connect(function(data)
print(data) -->Runda rozpoczęła się!
end)
Wydarzenie발생

local ServerScriptService = game:GetService("ServerScriptService")
-- Zdobądź odniesienie do instancji instancja
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
-- Wydarzenie do wiązania
bindableEvent:Fire("Round started!")

Niestandardowe wezwania

Przedmiot BindableFunction umożliwia synchronizację dwukolorową komunikację między skryptami. Możesz użyć go do zdefiniowania niestandardowej funkcji zwrotu i wywołania jej ręcznie poprzez wezwanie Class.BindableFunction:Execute

Aby utworzyć nowy BindableFunction używając okna Explorer w Studio:

  1. Przytrzymaj kursor nad kontenerem, do którego chcesz wstawić BindableFunction. Rekomendujemy używanie ServerScriptService dla komunikacji między serwerowymi skryptami i ReplicatedStorage dla komunikacji między klientami.
  2. Kliknij przycisk , który pojawia się po prawej stronie nazwy kontenera i wpisz instancję BindableFunction .
  3. Zmień nazwę instancji na TestBindableFunction .

Gdy stworzyłeś BindableFunction, możesz połączyć się z jego OnInvoke wezwieć w jednym skrypcie, a następnie Class.BindableFunction:Execute()|Execute() funkcję wezwania z innego skrypcu.

Połączenie zwrotne

local ServerScriptService = game:GetService("ServerScriptService")
-- Zdobądź odniesienie do funkcji wiążącej
local bindableFunction = ServerScriptService:WaitForChild("TestBindableFunction")
-- Funkcja zwrotu
local function addTwoNumbers(a, b)
return a + b
end
-- Ustaw funkcję jako wiązaną funkcję
bindableFunction.OnInvoke = addTwoNumbers
Zakup wydarzenia

local ServerScriptService = game:GetService("ServerScriptService")
-- Zdobądź odniesienie do funkcji wiążącej
local bindableFunction = ServerScriptService:WaitForChild("TestBindableFunction")
-- Przywołaj funkcję zwrotu i wygeneruj wartość
local sum = bindableFunction:Invoke(2, 4)
print(sum) --> 6

Ograniczenia argumentów

Gdy wyrzucasz BindableEvent lub wzywasz BindableFunction, przekazuje on wszystkie argumenty, które przesłałeś z wydarzenia lub funkcji zwrotnej. Możesz przekazać dowolny typ obiektu Roblox ( Enum, 2>Class.Instance2>, itp.).

Niezależne wskaźniki

Jeśli którekolwiek indeksy tabeli przepustej są nierozdzielane typy, takie jak Instance , userdata lub 1>funkcja1>, Roblox automatycznie konwertuje te indeksy w rzeczywiste struny.

Połączenie wątku

local ServerScriptService = game:GetService("ServerScriptService")
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
local function onEventFire(passedTable)
for k, v in passedTable do
print(typeof(k)) --> ciąg
end
end
-- Połącz funkcję z wydarzeniem
bindableEvent.Event:Connect(onEventFire)
Wydarzenie발생

local ServerScriptService = game:GetService("ServerScriptService")
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
-- Wydarzenie ognia z tabelą zawierającą instancję przestrzeni roboczej jako klucz
bindableEvent:Fire({
[workspace.Baseplate] = true
})

Indeksowanie Tabel

Jeśli przeszesz tabelę danych, nie przeszesz mieszaną tabelę kluczy numerowych i literackich. Zamiast tego przeszesz tabelę, która składa się w całości pary kluczowe (słownik) lub w całości kluczowe indeksy (maszyna).

Połączenie wątku

local ServerScriptService = game:GetService("ServerScriptService")
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
local function onEventFire(passedTable)
for k, v in passedTable do
print(k .. " = " .. v)
--> 1 = Miecz
--> 2 = Łuk
--> CharName = Diva Dragonslayer
--> CharClass = Rogue
end
end
-- Połącz funkcję z wydarzeniem
bindableEvent.Event:Connect(onEventFire)
Wydarzenie발생

local ServerScriptService = game:GetService("ServerScriptService")
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
-- Liczbowo z索wana tabela
local inventoryData = {
"Sword", "Bow"
}
-- Tabela słownika
local characterData = {
CharName = "Diva Dragonslayer",
CharClass = "Rogue"
}
-- Wydarzenie ognia z konsekwentnie indeksowanymi tabelami
bindableEvent:Fire(inventoryData)
bindableEvent:Fire(characterData)

Tożsamość tabeli

Tabely przesłane jako argumenty do wiązalnych wydarzeń i wezwywanych funkcji są kopiowane, co oznacza, że nie będą dokładnie równoważne tym, które są dostarczane podczas uruchamiania wydarzenia lub wzywania funkcji. Nie zostaną również zwrócone tabelki zwrócone do właściwego węzła. Możesz to zobaczyć, wykonując następujący skrypt na Class.Bindable

Połączenie zwrotne

local ServerScriptService = game:GetService("ServerScriptService")
local bindableFunction = ServerScriptService:WaitForChild("TestBindableFunction")
-- Funkcja zwrotu
local function returnTable(passedTable)
-- Wyświetl tożsamość tabeli przy wezwaniu
print(tostring(passedTable)) --> tabela: 0x48eb7aead27563d9
return passedTable
end
-- Ustaw funkcję jako wiązaną funkcję
bindableFunction.OnInvoke = returnTable
Zakup wydarzenia

local ServerScriptService = game:GetService("ServerScriptService")
local bindableFunction = ServerScriptService:WaitForChild("TestBindableFunction")
local inventoryData = {
"Sword", "Bow"
}
-- Wyświetl oryginalną tożsamość tabeli
print(tostring(inventoryData)) --> tabela: 0x059bcdbb2b576549
local invokeReturn = bindableFunction:Invoke(inventoryData)
-- Wyświetl tożsamość tabeli przy powrocie
print(tostring(invokeReturn)) --> table: 0x9fcae7919563a0e9

Metatabela

Jeśli tabela ma metabelę, wszystkie informacje o metabeli w przekazie zostaną stracone. W następnym przykładzie kodu właściwość NumWheels jest częścią metabeli Car. Gdy serwer otrzymuje następującą tabelę, właściwość

Połączenie wątku

local ServerScriptService = game:GetService("ServerScriptService")
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
local function onEvent(param)
print(param) --> { ["Nazwa"] = "MyTruck"
end
-- Połącz funkcję z wydarzeniem
bindableEvent.Event:Connect(onEvent)
Wydarzenie발생

local ServerScriptService = game:GetService("ServerScriptService")
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
local Car = {}
Car.NumWheels = 4
Car.__index = Car
local truck = {}
truck.Name = "MyTruck"
setmetatable(truck, Car)
-- Wydarzenie ognia z tabelą zawierającą metabelę
bindableEvent:Fire(truck)