Lua'da Olay Sistemleri
Tablolarda saklanan geri çağırmalarla hafif bir olay dağıtıcısı oluşturun.
Lua'da Olay Sistemleri, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.
Olay Sistemleri Neden Kullanılır?
Bir olay sistemi, üreticileri (olayları tetikleyen şeyleri) tüketicilerden (tepki veren şeyleri) ayırır. Lua'da bu sistem, geri çağırma işlevlerinden oluşan tablolarla kolayca kurulabilir.
Basit Olay Dağıtıcısı
Bir dağıtıcı, olay adına göre anahtarlanmış dinleyici listelerini saklar.
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
endDağıtıcıyı Kullanma
Olaylara :on ile abone olun ve bunları :emit ile tetikleyin.
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)Tek Kullanımlık Dinleyiciler
:once yöntemi, ilk çağrının ardından kendisini abonelikten çıkarmak üzere geri çağrıyı sarar.
function EventEmitter:once(event, fn)
local wrapper
wrapper = function(...)
self:off(event, wrapper)
fn(...)
end
self:on(event, wrapper)
endDinleyicileri Kaldırma
:off yöntemi, belirli bir dinleyiciyi başvurusuna göre kaldırır.
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
endOlaylar için Öncelik Kuyrukları
Her dinleyiciye bir öncelik alanı ekleyin. Yüksek öncelikli işleyicilerin önce çalışması için listeyi kayıt sırasında sıralayın.
Eşzamansız Olay Kuyruğu
Dinleyicileri hemen çağırmak yerine olayları bir kuyruğa ekleyin ve her karede/işlem adımında işleyin.
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
endEmit Sırasında Değişikliği Önleme
Olayları tetiklerken dinleyici listesinin bir kopyası üzerinde yineleme yapın; böylece tetikleme sırasında dinleyici eklenmesi veya kaldırılması hatalara yol açmaz.
Ad Alanlı Olaylar
Olayları sisteme göre düzenlemek için noktalı olay adları ("player.damaged", "player.healed") kullanın.
Zayıf Dinleyici Tabloları
Değerleri zayıf olan dinleyici tabloları kullanın; böylece bir abone nesnesi çöp toplayıcı tarafından temizlenirse dinleyicisi otomatik olarak kaldırılır ve uzun süre çalışan oyunlarda bellek sızıntıları önlenir.
Oyun Döngüsüyle Entegrasyon
Olay sistemini oyun döngüsüyle bütünleştirin: giriş olayları → mantık olayları → oluşturma olayları; bunlar her karede sırayla işlenir.
Olay Sistemi Sorusu
Bir olay sisteminin temel yararı nedir?
Özet: Olay Sistemleri
Lua olay sistemleri, adlandırılmış dinleyici listelerinden oluşan bir tablo kullanır. Eksiksiz bir dağıtıcı için on, emit, off ve once işlevlerini uygulayın. Üretim oyunlarında eşzamansız kuyruklar ve zayıf tablolar kullanın.
Sıkça Sorulan Sorular
“Lua'da Olay Sistemleri” dersi ücretsiz mi?
Evet — “Lua'da Olay Sistemleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.
“Lua'da Olay Sistemleri” dersinde ne öğreneceğim?
Tablolarda saklanan geri çağırmalarla hafif bir olay dağıtıcısı oluşturun. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Lua Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Lua'da Olay Sistemleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Lua'da Olay Sistemleri
- Bileşen Tabanlı Betikleme
- Durum Makineleriyle Yapay Zeka Davranışı
- Veri Odaklı Yapılandırma ve Sıcak Yeniden Yükleme