Acara adalah kejadian dalam permainan Anda yang dapat Anda dengarkan dan respons terhadapnya. Banyak layanan dan objek Roblox memiliki acara bawaan yang secara otomatis dipicu sebagai respons terhadap tindakan atau perubahan tertentu.
Sebagai contoh, Character seorang pemain yang menyentuh BasePart secara otomatis memicu acara Touched. Setiap kali seorang pemain bergabung dengan permainan Anda, acara Players.PlayerAdded dipicu.
Karena banyaknya acara dan arsitektur klien-server, pemrograman Roblox sering disebut sebagai berbasis acara. Pendekatan ini berbeda dari banyak mesin permainan lainnya, yang menekankan menjalankan kode secara berurutan dari frame ke frame.
Anda tidak perlu mendengarkan acara atau mengambil tindakan apa pun sebagai respons terhadapnya, tetapi acara tetap dipicu dan tersedia. Ketika Anda ingin merespons sebuah acara, Anda menghubungkan sebuah fungsi ke acara tersebut.
Hubungkan fungsi ke acara
Anda menghubungkan sebuah fungsi ke suatu acara menggunakan Connect() untuk mengeksekusi kode setiap kali acara dipicu. Sebagian besar acara meneruskan argumen ke fungsi yang terhubung. Sebagai contoh, acara BasePart.Touched meneruskan objek yang menyentuh bagian (seperti tangan kiri atau roda mobil), dan acara Players.PlayerAdded meneruskan Player yang bergabung dengan permainan Anda.
Contoh kode berikut menunjukkan cara menghubungkan fungsi bernama onPartTouched() ke acara Touched dari sebuah bagian:
-- Mengasumsikan skrip ini merupakan anak dari bagian
local part = script.Parent
-- Fungsi yang ingin Anda jalankan
local function onPartTouched(object)
print("Bagian telah disentuh oleh", object:GetFullName())
end
-- Hubungkan fungsi tersebut ke acara Touched bagian
part.Touched:Connect(onPartTouched)
Anda juga dapat menghubungkan fungsi anonim ke acara ketika Anda ingin menggunakan variabel dalam ruang lingkup induk dan tidak perlu menggunakan fungsi tersebut di tempat lain. Sebagai contoh, contoh kode ini menghindari fungsi perantara yang canggung dari contoh serupa di Layanan:
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
-- Fungsi anonim yang memanggil saveProgress() saat karakter dihapus
-- dari permainan (dalam hal ini, saat pemain meninggalkan).
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)
Putuskan sambungan fungsi dari acara
Metode Connect() mengembalikan objek RBXScriptConnection. Jika Anda menghubungkan sebuah fungsi ke suatu acara, tetapi tidak ingin memanggil fungsi tersebut saat acara dipicu lagi (seperti setelah beberapa kondisi terpenuhi), putuskan sambungan dengan memanggil Disconnect() pada objek RBXScriptConnection.
Contoh kode berikut menunjukkan cara menghubungkan dan memutuskan sambungan fungsi dari acara Part.Touched:
local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local targetPart = Workspace.TargetPart
-- Deklarasikan variabel placeholder kosong untuk sambungan
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("Bagian tersebut memukul target!")
-- Putuskan sambungan
connection:Disconnect()
end
end
-- Hubungkan fungsi di atas ke acara Touched
connection = part.Touched:Connect(onPartTouched)
Tunggu acara dipicu
Jika Anda ingin skrip menunggu sampai acara tertentu dipicu, gunakan metode Wait(). Metode ini mengembalikan argumen acara, yang dapat Anda tetapkan ke variabel untuk digunakan nanti:
local Workspace = game:GetService("Workspace")local part = Workspace.Partlocal touchedPart = part.Touched:Wait()print("Bagian tersebut telah disentuh oleh", touchedPart:GetFullName())
Jenis acara lainnya
Acara dapat diikat memungkinkan Anda berkomunikasi antara skrip di sisi yang sama dari batas klien-server.
Acara jarak jauh memungkinkan Anda berkomunikasi lintas batas klien-server.
Acara mesin tertunda menunda penangan acara sampai titik pemulihan tertentu.