Lua Academy · पाठ

Lua में इवेंट सिस्टम

टेबल में संग्रहीत कॉलबैक के साथ हल्का इवेंट डिस्पैचर बनाएँ।

पाठ 1, कुल 4 में से13 चरण

Lua में इवेंट सिस्टम, CoddyKit पर Lua Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Lua Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

इवेंट सिस्टम क्यों?

इवेंट सिस्टम उत्पादकों (इवेंट उत्पन्न करने वाली चीज़ों) को उपभोक्ताओं (प्रतिक्रिया देने वाली चीज़ों) से अलग करता है। Lua में इसे callback फ़ंक्शन वाली तालिकाओं से आसानी से बनाया जा सकता है।

सरल इवेंट डिस्पैचर

डिस्पैचर इवेंट नाम के आधार पर लिसनर की सूचियाँ रखता है।

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

डिस्पैचर का उपयोग करना

:on से घटनाओं की सदस्यता लें और :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)

एक-बार चलने वाले श्रोता

:once विधि कॉलबैक को इस तरह लपेटती है कि पहली बार चलने के बाद वह स्वयं सदस्यता समाप्त कर ले।

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

श्रोताओं को हटाना

:off विधि संदर्भ के आधार पर किसी विशिष्ट श्रोता को हटाती है।

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

घटनाओं के लिए प्राथमिकता कतारें

हर श्रोता में प्राथमिकता फ़ील्ड जोड़ें। पंजीकरण के समय सूची को क्रमबद्ध करें, ताकि अधिक प्राथमिकता वाले हैंडलर पहले चलें।

अतुल्यकालिक घटना कतार

श्रोताओं को तुरंत चलाने के बजाय, घटनाओं को एक कतार में डालें और हर फ़्रेम/टिक पर उनका प्रसंस्करण करें।

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

घटना सक्रिय करते समय संशोधन रोकना

घटना सक्रिय करते समय श्रोताओं की सूची की एक प्रति पर चलें, ताकि सक्रियण के दौरान जोड़ने या हटाने से बग उत्पन्न न हों।

नाम-क्षेत्र वाली घटनाएँ

घटनाओं को प्रणाली के अनुसार व्यवस्थित करने के लिए बिंदु वाले घटना नामों ("player.damaged", "player.healed") का उपयोग करें।

कमज़ोर श्रोता तालिकाएँ

कमज़ोर-मूल्य वाली श्रोता तालिकाओं का उपयोग करें, ताकि किसी सब्सक्राइबर ऑब्जेक्ट को कचरा-संग्रहित किए जाने पर उसका श्रोता अपने-आप हट जाए — इससे लंबे समय तक चलने वाले खेलों में मेमोरी लीक रुकती हैं।

गेम लूप के साथ एकीकरण

घटना प्रणाली को गेम लूप के साथ एकीकृत करें: इनपुट घटनाएँ → तर्क घटनाएँ → रेंडर घटनाएँ, जिन्हें हर फ़्रेम में क्रम से संसाधित किया जाता है।

घटना प्रणाली का प्रश्न

घटना प्रणाली का मुख्य लाभ क्या है?

पुनरावलोकन: घटना प्रणालियाँ

Lua की घटना प्रणालियाँ नामित श्रोता सूचियों वाली एक तालिका का उपयोग करती हैं। पूर्ण डिस्पैचर के लिए on, emit, off और once लागू करें। वास्तविक खेलों में अतुल्यकालिक कतारों और कमज़ोर तालिकाओं का उपयोग करें।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Lua सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
40
पाठ
159

अक्सर पूछे जाने वाले प्रश्न

क्या “Lua में इवेंट सिस्टम” पाठ निःशुल्क है?

हाँ — Lua Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Lua में इवेंट सिस्टम” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Lua में इवेंट सिस्टम” में मैं क्या सीखूँगा?

टेबल में संग्रहीत कॉलबैक के साथ हल्का इवेंट डिस्पैचर बनाएँ। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Lua Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Lua Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Lua Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“Lua में इवेंट सिस्टम” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Lua Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Lua Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Lua में इवेंट सिस्टम
  2. कंपोनेंट-आधारित स्क्रिप्टिंग
  3. स्टेट मशीनों के साथ कृत्रिम बुद्धिमत्ता का व्यवहार
  4. डेटा-आधारित कॉन्फ़िगरेशन और हॉट-रीलोड
← Lua Academy पर वापस जाएँ