Sự kiện là những sự kiện xảy ra trong trải nghiệm của bạn mà bạn có thể lắng nghe và đáp lại.Nhiều dịch vụ và đối tượng Roblox đã có sự kiện tích hợp sẵn được kích hoạt tự động lửa đáp lại các hành động hoặc thay đổi cụ thể.
Ví dụ, một người chơi Character chạm vào BasePart tự động kích hoạt một sự kiện Touched .Mỗi khi một người chơi tham gia vào trải nghiệm của bạn, sự kiện Players.PlayerAdded bắt lửa.
Do số lượng sự kiện và kiến trúc client-server lớn, lập trình Roblox thường được gọi là sự kiện lái .Cách tiếp cận này khác với nhiều động cơ trò chơi khác, nhấn mạnh chạy mã trên cơ sở khung bằng bước.
Bạn không cần phải lắng nghe các sự kiện hoặc thực hiện bất kỳ hành động nào để đáp lại chúng, nhưng các sự kiện đang bắn và có sẵn mặc dù vậy.Khi bạn muốn đáp lại một sự kiện, bạn kết nối một chức năng với nó.
Kết nối chức năng với sự kiện
Bạn kết nối một chức năng với một sự kiện bằng cách sử dụng Connect() để thực thi mã mỗi khi sự kiện bắt lửa.Hầu hết các sự kiện truyền tham số cho các chức năng kết nối của chúng.Ví dụ, sự kiện BasePart.Touched truyền đối tượng đã chạm vào phần (như bàn tay trái hoặc bánh xe ô tô), và sự kiện Players.PlayerAdded truyền đối tượng Player tham gia vào trải nghiệm của bạn.
Ví dụ mã sau đây minh họa cách kết nối chức năng có tên onPartTouched() với sự kiện Touched của một phần:
-- Xác định rằng kịch bản được gán cho phần
local part = script.Parent
-- Chức năng bạn muốn chạy
local function onPartTouched(object)
print("Part was touched by", object:GetFullName())
end
-- Kết nối chức năng với sự kiện Chạm của phần
part.Touched:Connect(onPartTouched)
Bạn cũng có thể kết nối chức năng vô danh với sự kiện khi bạn muốn sử dụng biến trong phạm vi cha và không cần phải sử dụng chức năng ở nơi khác.Ví dụ, mẫu mã này tránh chức năng trung gian khó xử từ mẫu tương tự trong Dịch vụ :
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
-- Chức năng vô danh gọi saveProgress() khi một nhân vật bị xóa
-- từ trải nghiệm (trong trường hợp này, khi người chơi rời đi).
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)
Tách chức năng khỏi sự kiện
Phương pháp Connect() trả về một đối tượng RBXScriptConnection.Nếu bạn kết nối chức năng với một sự kiện, nhưng không muốn gọi chức năng lần tiếp theo một sự kiện bắt lửa (như sau khi đáp ứng một số điều kiện), hãy tách nó bằng cách gọi Disconnect() trên đối tượng RBXScriptConnection.
Ví dụ mã sau đây cho thấy cách kết nối và tách một chức năng khỏi sự kiện Part.Touched:
local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local targetPart = Workspace.TargetPart
-- Tuyên bố một biến placeholder trống cho kết nối
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("The part hit the target!")
-- Tách kết nối
connection:Disconnect()
end
end
-- Kết nối chức năng trên với sự kiện đã chạm
connection = part.Touched:Connect(onPartTouched)
Nếu bạn chỉ muốn kết nối chức năng với một sự kiện một lần - đó là, chỉ chạy chức năng lần đầu tiên sự kiện bắt lửa - hãy sử dụng phương pháp Once() để làm một lựa chọn thuận tiện hơn để kết nối và thoát khỏi chức năng.
Chờ các sự kiện bắt lửa
Nếu bạn muốn một kịch bản cho tới khi một sự kiện cụ thể bắt lửa, hãy sử dụng phương pháp Wait().Phương pháp này trả về các tham số của sự kiện, mà bạn có thể gán cho biến để sử dụng sau:
local Workspace = game:GetService("Workspace")local part = Workspace.Partlocal touchedPart = part.Touched:Wait()print("The part was touched by", touchedPart:GetFullName())
Các loại sự kiện khác
Sự kiện có thể gắn kết cho phép bạn giao tiếp giữa các kịch bản trên cùng một bên của ranh giới khách-máy chủ.
Sự kiện remote cho phép bạn giao tiếp theo ranh giới khách-máy chủ.