Peristiwa

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Peristiwa adalah kejadian dalam pengalaman Anda yang dapat Anda dengarkan dan tanggapi.Banyak layanan dan objek Roblox memiliki acara bawaan yang secara otomatis menembak dalam menanggapi tindakan atau perubahan tertentu.

Sebagai contoh, sentuhan pemain Character menyentuh BasePart secara otomatis memicu peristiwa Touched.Setiap kali pemain bergabung dengan pengalaman Anda, acara Players.PlayerAdded terjadi.

Karena jumlah besar acara dan arsitektur klien-server, pemrograman Roblox sering disebut sebagai berbasis acara .Pendekatan ini berbeda dari banyak mesin permainan lain, yang menekankan menjalankan kode pada basis frame-by-frame.

Anda tidak perlu mendengarkan acara atau mengambil tindakan apa pun sebagai respons terhadap mereka, tetapi acara sedang menembak dan tersedia meskipun demikian.Ketika Anda ingin menanggapi suatu peristiwa, Anda menghubungkan fungsi ke sana.

Hubungkan fungsi ke acara

Anda menghubungkan fungsi ke acara menggunakan Connect() untuk mengeksekusi kode setiap kali acara terbakar.Sebagian besar acara mengirim argumen ke fungsi terhubung mereka.Sebagai contoh, acara BasePart.Touched melewati objek yang menyentuh bagian (seperti tangan kiri atau roda mobil), dan acara Players.PlayerAdded melewati Player yang bergabung dengan pengalaman Anda.

Contoh kode berikut menunjukkan cara menghubungkan fungsi bernama onPartTouched() ke acara Touched dari bagian:


-- Menganggap skrip adalah orang tua ke bagian
local part = script.Parent
-- Fungsi yang ingin Anda jalankan
local function onPartTouched(object)
print("Part was touched by", object:GetFullName())
end
-- Hubungkan fungsi ke acara Sentuh bagian
part.Touched:Connect(onPartTouched)

Anda juga dapat menghubungkan fungsi anonim ke acara saat Anda ingin menggunakan variabel di lingkup orangtua dan tidak perlu menggunakan fungsi di tempat lain.Sebagai contoh, sampel kode ini menghindari fungsi perantara yang canggung 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 kasus ini, saat pemain pergi).
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)

Putuskan fungsi dari acara

Metode Connect() kembalikan objek RBXScriptConnection.Jika Anda menghubungkan fungsi ke acara, tetapi tidak ingin memanggil fungsi saat berikutnya acara terbakar (seperti setelah beberapa kondisi dipenuhi), putuskan koneksi dengan memanggil Disconnect() pada objek RBXScriptConnection.

Contoh kode berikut menunjukkan cara menghubungkan dan melepaskan fungsi dari acara Part.Touched:


local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local targetPart = Workspace.TargetPart
-- Deklarasikan variabel penanda kosong untuk koneksi
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("The part hit the target!")
-- Hubungkan kembali koneksi
connection:Disconnect()
end
end
-- Hubungkan fungsi di atas ke acara Touched
connection = part.Touched:Connect(onPartTouched)

Jika Anda hanya ingin menghubungkan fungsi ke suatu peristiwa sekali - yaitu, hanya jalankan fungsi pertama kali peristiwa itu terbakar - gunakan metode Once() sebagai alternatif yang lebih nyaman untuk menghubungkan dan melepaskan fungsi.

Tunggu peristiwa untuk menembak

Jika Anda ingin skrip menghasilkan sampai peristiwa tertentu terjadi, gunakan metode Wait().Metode ini mengembalikan argumen acara, yang dapat Anda atribusikan ke variabel untuk digunakan nanti:


local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local touchedPart = part.Touched:Wait()
print("The part was touched by", touchedPart:GetFullName())

Jenis Acara Lain

  • Acara yang dapat diikat

    Acara yang dapat diikat memungkinkan Anda berkomunikasi antara skrip di sisi yang sama dari batas klien-server.

  • Peristiwa remote

    Peristiwa remote memungkinkan Anda berkomunikasi melintasi batas klien-server .