BindableEvent và BindableFunction объекты cho phép bạn kết nối các hành vi giữa các script trên cùng một bên của giới hạn 0>客户端-服务器0> và truyền tải một kết quả mong muốn cụ thể cho các hành động trong kinh nghiệm.
Trường hợp sử dụng phổ biến nhất cho các sự kiện có cấu hình là cho những trải nghiệm có cấu hình. Ví dụ, bạn có thể có một sự kiện "đã bắt đầu" cho phép các ngườc khác nhau bắt đầu một timer và hiển thị một bảng xếp hạng, với một sự kiện "đã kết th
Vì chúng coordinated các hoạt động giữa các script, các sự kiện có thể kết nối được thường được sử dụng trên máy chủ, nhưng bạn cũng có thể sử dụng chúng trên client.
Tùy thuộc vào cách trải nghiệm của bạn hoạt động, các sự kiện có thể kết hợp giúp làm cho mã của bạn độc lập hơn, nhưng tập tin module thường là một lựa chọn tốt hơn cho các tình huống mà bạn cần phải chia sẻ dữ liệu giữa cá
Sự kiểm tra
Đối tượng BindableEvent cho phép các sự kiện tùy chỉnh qua giao tiếp asynchronous, một chiều giữa các script.
Khi bạn kích hoạt một Class.BindableEvent qua phương pháp Class.BindableEvent:Fire()|Fire() , script kích hoạt không BindableEventtạo một lượng dữ liệu nào đó và chức năng mục tiêu nhận Fire()
Để tạo một BindableEvent mới bằng cách sử dụng cửa sổ Explorer trong Studio:
- Bỏ chuột vào container mà bạn muốn gắn Class.BindableEvent vào. Chúng tôi khuyến nghị sử dụng Class.ServerScriptService cho giao tiếp giữa các script máy chủ và Class.ReplicatedStorage cho giao tiếp giữa các script client.
- Nhấp vào nút ⊕ ở phía bên phải của tên container và nhúc nhích một instace BindableEvent .
- Đổi tên instâne thành TestBindableEvent .
Sau khi bạn đã tạo một BindableEvent, kết nối một chức năng vào sự kiện Event của nó trong một script, và sau đó Fire() sự kiện từ một script khác.
Kết Nối Sự Kiện
local ServerScriptService = game:GetService("ServerScriptService")
-- Nhận tham chiếu đến một mục tài liệu có thể liên ví dụ / trường hợp
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
-- Kết nối chức năng anonim đến sự kiện
bindableEvent.Event:Connect(function(data)
print(data) --> Vòng bắt đầu!
end)
Sự kiện발射
local ServerScriptService = game:GetService("ServerScriptService")-- Nhận tham chiếu đến một mục tài liệu có thể liên ví dụ / trường hợplocal bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")-- Sự kiểm tra được kết hợpbindableEvent:Fire("Round started!")
Gọi lại tùy chỉnh
Đối tượng BindableFunction cho phép truyền đồng bộ hai chiều giữa các script. Bạn có thể sử dụng nó để định nghĩa một chức năng gọi điều khiển tùy ch
Để tạo một BindableFunction mới bằng cách sử dụng cửa sổ Explorer trong Studio:
- Bỏ chuột vào container mà bạn muốn gắn Class.BindableFunction vào. Chúng tôi khuyến nghị sử dụng Class.ServerScriptService cho mục đích giao tiếp giữa các script máy chủ và Class.ReplicatedStorage cho mục đích giao tiếp giữa các script máy chủ.
- Nhấp vào nút ⊕ ở phía bên phải của tên container và nhúc nhích một instate BindableFunction .
- Đổi tên instância để TestBindableFunction .
Một khi bạn đã tạo một BindableFunction, bạn có thể kết nối với các OnInvoke 回调 trong một script, sau đó Invoke() 함수 từ một script khác.
Kết Nối Callback
local ServerScriptService = game:GetService("ServerScriptService")
-- Nhận tham chiếu đến chức năng có thể liên kết
local bindableFunction = ServerScriptService:WaitForChild("TestBindableFunction")
-- Hàm chức năng
local function addTwoNumbers(a, b)
return a + b
end
-- Đặt hàm như một hàm được gọi
bindableFunction.OnInvoke = addTwoNumbers
Mời sự kiện
local ServerScriptService = game:GetService("ServerScriptService")-- Nhận tham chiếu đến chức năng có thể liên kếtlocal bindableFunction = ServerScriptService:WaitForChild("TestBindableFunction")-- Gọi hàm chức năng và trả giá trị đã được xuấtlocal sum = bindableFunction:Invoke(2, 4)print(sum) --> 6
Giới hạn biểu tượng
Khi bạn khởi động một BindableEvent hoặc gọi một BindableFunction , nó sẽ điều chỉnh bất kỳ lý do tại sao bạn đưa với sự kiện hoặc đến hành động đã lậ
Chỉ số không phải dạng chuỗi
Nếu bất kỳ 索引 của một bảng dữ liệu đã qua đều là những kiểu non-string, chẳng hạn như một Instance , userdata hoặc 1> function1>, Roblox tự động chuyển các索引 này thành các dòng chuỗi.
Kết Nối Sự Kiện
local ServerScriptService = game:GetService("ServerScriptService")
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
local function onEventFire(passedTable)
for k, v in passedTable do
print(typeof(k)) --> chuỗi
end
end
-- Kết nối chức năng đến sự kiện
bindableEvent.Event:Connect(onEventFire)
Sự kiện발射
local ServerScriptService = game:GetService("ServerScriptService")local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")-- Sự kiện lửa với bảng chứa một máy chủ lưu trữ như một chìa khóabindableEvent:Fire({[workspace.Baseplate] = true})
Tìm kiếm Bảng
Nếu bạn qua một bảng dữ liệu, đừng qua một bảng dữ liệu hỗn hợp của các chuỗi và chìa khóa ngẫu nhiên. Thay vào đó, qua một bảng có tất cả hoàn toàn của các cặp giá trị chìa khóa (một từ điển) hoặc hoàn toàn của các chỉ mục
Kết Nối Sự Kiện
local ServerScriptService = game:GetService("ServerScriptService")
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
local function onEventFire(passedTable)
for k, v in passedTable do
print(k .. " = " .. v)
--> 1 =Thanh kiếm
--> 2 = Cung
--> CharName = Diva Kẻ Giết Rồng
--> CharClass = Kẻ cướp
end
end
-- Kết nối chức năng đến sự kiện
bindableEvent.Event:Connect(onEventFire)
Sự kiện발射
local ServerScriptService = game:GetService("ServerScriptService")local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")-- Bảng trích sốlocal inventoryData = {"Sword", "Bow"}-- Bảng từ điểnlocal characterData = {CharName = "Diva Dragonslayer",CharClass = "Rogue"}-- Sự kiện lửa với các bảng được lưu trữ đồng nhấtbindableEvent:Fire(inventoryData)bindableEvent:Fire(characterData)
Nhận dạng bảng
Các bảng được truyền làm mệnh lệnh cho các sự kiện và hành động có thể được sao chép, có nghĩa là chúng sẽ không hoàn toàn tương đương với những gì được cung cấp khi thực hiện sự kiện hoặc kích hoạt hành động. Bạn có thể thấy
Kết Nối Callback
local ServerScriptService = game:GetService("ServerScriptService")
local bindableFunction = ServerScriptService:WaitForChild("TestBindableFunction")
-- Hàm chức năng
local function returnTable(passedTable)
-- Tiết kiệm thời gian trong khi tạo bảng
print(tostring(passedTable)) --> bảng: 0x48eb7aead27563d9
return passedTable
end
-- Đặt hàm như một hàm được gọi
bindableFunction.OnInvoke = returnTable
Mời sự kiện
local ServerScriptService = game:GetService("ServerScriptService")local bindableFunction = ServerScriptService:WaitForChild("TestBindableFunction")local inventoryData = {"Sword", "Bow"}-- Hiển thị nhận dạng bảng gốcprint(tostring(inventoryData)) --> bảng: 0x059bcdbb2b576549local invokeReturn = bindableFunction:Invoke(inventoryData)-- Tạo mối quan hệ bảng trên trở lạiprint(tostring(invokeReturn)) --> table: 0x9fcae7919563a0e9
Các biến đổi
Nếu một bảng có một metatable, tất cả thông tin metatable được mất trong quá trình chuyển. Trong ví dụ mã sau đây, thuộc tính NumWheels là một trong những thuộc tính Car trong
Kết Nối Sự Kiện
local ServerScriptService = game:GetService("ServerScriptService")
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
local function onEvent(param)
print(param) --> { ["Tên"] = "MyTruck"]
end
-- Kết nối chức năng đến sự kiện
bindableEvent.Event:Connect(onEvent)
Sự kiện발射
local ServerScriptService = game:GetService("ServerScriptService")local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")local Car = {}Car.NumWheels = 4Car.__index = Carlocal truck = {}truck.Name = "MyTruck"setmetatable(truck, Car)-- Sự kiện lửa với bảng dữ liệu bao gồm một bảng dữ liệubindableEvent:Fire(truck)