0Pricing
Lua Academy · Pelajaran

Sistem Peristiwa dalam Lua

Bangun dispatcher peristiwa ringan dengan callback yang disimpan dalam tabel.

Sistem Peristiwa dalam Lua adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.

Mengapa Sistem Peristiwa?

Sistem peristiwa memisahkan produsen (hal-hal yang memicu peristiwa) dari konsumen (hal-hal yang meresponsnya). Di Lua, sistem ini dapat dibuat dengan mudah menggunakan tabel berisi fungsi callback.

Pengirim Peristiwa Sederhana

Pengirim menyimpan daftar pendengar yang diindeks berdasarkan nama peristiwa.

local EventEmitter = {}
EventEmitter.__index = EventEmitter

function EventEmitter.new()
  return setmetatable({_listeners = {}}, EventEmitter)
end

function EventEmitter:on(event, fn)
  self._listeners[event] = self._listeners[event] or {}
  table.insert(self._listeners[event], fn)
end

function EventEmitter:emit(event, ...)
  for _, fn in ipairs(self._listeners[event] or {}) do
    fn(...)
  end
end

Menggunakan Pengirim

Berlanggananlah pada peristiwa dengan :on dan picu peristiwa tersebut dengan :emit.

local bus = EventEmitter.new()
bus:on("playerHit", function(player, damage)
  player.hp = player.hp - damage
  print(player.name, "took", damage, "damage")
end)
bus:emit("playerHit", {name="Alice", hp=100}, 15)

Pendengar Sekali Pakai

Metode :once membungkus callback agar mendaftarkan dirinya sendiri secara otomatis setelah pemanggilan pertama.

function EventEmitter:once(event, fn)
  local wrapper
  wrapper = function(...)
    self:off(event, wrapper)
    fn(...)
  end
  self:on(event, wrapper)
end

Menghapus Pendengar

Metode :off menghapus pendengar tertentu berdasarkan referensinya.

function EventEmitter:off(event, fn)
  local list = self._listeners[event]
  if not list then return end
  for i, f in ipairs(list) do
    if f == fn then table.remove(list, i); return end
  end
end

Antrean Prioritas untuk Peristiwa

Tambahkan bidang prioritas pada setiap pendengar. Urutkan daftar saat pendaftaran agar penangan berprioritas tinggi berjalan lebih dahulu.

Antrean Peristiwa Asinkron

Alih-alih langsung memanggil pendengar, masukkan peristiwa ke dalam antrean lalu proses peristiwa tersebut pada setiap frame atau tick.

local queue = {}
local function postEvent(event, data)
  queue[#queue+1] = {event=event, data=data}
end
local function processEvents()
  local current = queue
  queue = {}
  for _, e in ipairs(current) do
    bus:emit(e.event, e.data)
  end
end

Mencegah Modifikasi Selama Pemancaran

Saat memancarkan peristiwa, lakukan iterasi pada salinan daftar pendengar agar penambahan atau penghapusan selama pemancaran tidak menimbulkan bug.

Peristiwa dengan Ruang Nama

Gunakan nama peristiwa bertitik ("player.damaged", "player.healed") untuk mengatur peristiwa berdasarkan sistem.

Tabel Pendengar Lemah

Gunakan tabel pendengar dengan nilai lemah agar jika objek pelanggan dihapus oleh pengumpul sampah, pendengarnya otomatis dihapus — sehingga kebocoran memori dalam permainan yang berjalan lama dapat dicegah.

Integrasi dengan Perulangan Permainan

Integrasikan sistem peristiwa dengan perulangan permainan: peristiwa masukan → peristiwa logika → peristiwa render, yang diproses secara berurutan pada setiap frame.

Pertanyaan tentang Sistem Peristiwa

Apa manfaat utama sistem peristiwa?

Ringkasan: Sistem Peristiwa

Sistem peristiwa Lua menggunakan tabel yang berisi daftar pendengar bernama. Implementasikan on, emit, off, dan once untuk membuat pengirim peristiwa yang lengkap. Gunakan antrean asinkron dan tabel lemah dalam permainan produksi.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Sistem Peristiwa dalam Lua” gratis?

Ya — teks lengkap “Sistem Peristiwa dalam Lua” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Sistem Peristiwa dalam Lua”?

Bangun dispatcher peristiwa ringan dengan callback yang disimpan dalam tabel. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Lua Academy?

Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Sistem Peristiwa dalam Lua” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Sistem Peristiwa dalam Lua
  2. Skrip Berbasis Komponen
  3. Perilaku Kecerdasan Buatan dengan Mesin Keadaan
  4. Konfigurasi Berbasis Data dan Muat Ulang Langsung
← Kembali ke Lua Academy