Acara adalah peristiwa dalam pengalaman Anda yang dapat Anda dengarkan dan respons. Banyak layanan dan objek Roblox memiliki acara bawaan yang secara otomatis menembak setelah menanggapi tindakan atau perubahan tertentu.
Misalnya, Character pemain menyentuh BasePart secara otomatis menyetel acara Touched. Setiap kali pemain bergabung dengan pengalaman Anda, acara 2>Class.Players.PlayerAdded2> diaktifkan.
Karena jumlah acara dan arsitektur antara klien dan server yang besar, pemrograman Roblox sering disebut sebagai berbasis acara . Pendekatan ini berbeda dengan banyak mesin game lainnya, yang menekankan mengeksekuskan kode di basis frame-by-frame.
Anda tidak perlu mendengarkan acara atau mengambil tindakan terhadapnya, tetapi acara sedang berlangsung dan tersedia namun. Saat Anda ingin merespon acara, Anda menghubungkan fungsi kepada itu.
Menghubungkan Fungsi ke Acara
Anda menghubungkan fungsi ke acara menggunakan Connect() untuk mengeksekusi kode setiap kali acara diaktifkan. Kebanyakan acara mengembalikan argumen ke fungsi terhubung mereka. Misalnya, acara Class.BasePart.
Sampel kode berikut menunjukkan cara menghubungkan fungsi bernama onPartTouched() ke acara Touched bagian:
-- Mengasumsikan bahwa skrip dianggap sebagai bagian
local part = script.Parent
-- Fungsi yang ingin Anda eksekusikan
local function onPartTouched(object)
print("Part was touched by", object:GetFullName())
end
-- Hubungkan fungsi ke acara Touched bagian
part.Touched:Connect(onPartTouched)
Anda juga dapat menghubungkan fungsi anonim ke acara ketika Anda ingin menggunakan variabel di skala orang tua dan tidak perlu menggunakan fungsi di tempat lain. Misalnya, contoh kode ini menghindari fungsi intermediator yang aneh dari sampel 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 pengalaman (dalam hal ini, ketika pemain meninggalkan).
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)
Mengacak Fungsi dari Acara
Metode Connect() mengembalikan objek RBXScriptConnection jika Anda menghubungkan fungsi ke acara, tetapi tidak ingin memanggil fungsi lain ketika acara berakhir (seperti setelah beberapa kondisi dipenuhi
Contoh kode berikut menunjukkan cara menghubungkan dan menghubungkan kembali fungsi dari acara Part.Touched :
local part = workspace.Part
local targetPart = workspace.TargetPart
-- Deklarasikan variabel pengganti kosong untuk koneksi
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("The part hit the target!")
-- Tanggalkan koneksi
connection:Disconnect()
end
end
-- Hubungkan fungsi di atas ke acara Touched
connection = part.Touched:Connect(onPartTouched)
Jika Anda hanya ingin menghubungkan fungsi ke acara sekali—yaitu, hanya eksekuti fungsi saat acara pertama kali menyetel api—gunakan metode Datatype.RBXScriptSignal.Once()|Once() sebagai alternatif yang lebih mudah untuk menghubungkan dan melepas fungsi.
Menunggu Acara untuk Dipicu
Jika Anda ingin skrip menghasilkan sampai acara khusus diaktifkan, gunakan metode Wait(). Metode ini mengembalikan argumen acara, yang dapat Anda atribusikan ke variabel untuk penggunaan berikutnya:
local part = workspace.Partlocal touchedPart = part.Touched:Wait()print("The part was touched by", touchedPart:GetFullName())
Jenis Acara Lainnya
Acara yang dapat disesuaikan memungkinkan Anda berkomunikasi antara skrip di sisi yang sama dari batas klien-server.
Acara remote memungkinkan Anda berkomunikasi melalui batas antara klien dan server.