本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第九课 后端面向对象和事件推送」,主讲:浮生梦。 课程体系:996 引擎传奇开发教学 · 威海旷世互娱教学基地
你反复强调的那段 Lua 面向对象,我给你总结成死记硬背 4 行:
-- 1. 定义类
local M = {}
M.__index = M
-- 2. 写方法
function M:test() end
-- 3. 创建对象
function M.new()
local obj = setmetatable({}, M)
return obj
end
-- 4. 使用
local o = M.new()
o:test()
你讲的关键点:
__index 是规则:找不到就去原表里找方法setmetatable 是绑定:把空表和类关联self = 你创建出来的对象自己你现场写的:
player.item = Item.new(player)
player.var = Var.new(player)
player.map = Map.new(player)
player.skill = Skill.new(player)
player.item:give("木剑", 1)
player.var:set("次数", 100)
player.map:goTo(1001)
self.actor 拿到玩家ID你讲了最核心的一句话:
死亡→写成就、打怪→写成就、获得货币→写成就
代码散得到处都是,改不动
所有地方只需要写一行:
event:push("玩家死亡", actor)
event:push("打怪完成", actor, mid)
成就系统里统一监听处理:
event:add("玩家死亡", function(actor)
-- 死亡计数+1
end, "成就系统")
add:往表里塞一个函数push:遍历表里的函数,全部执行一遍rm:从表里删掉函数tag:唯一ID,方便删除once:执行一次就消失depth派发锁:防止遍历的时候删表崩溃dead墓碑:先标记死亡,最后统一清理pcall:报错不崩服local event = QF.new()
-- 1. 监听
event:add("奔跑", function()
print("我在跑")
end, "测试1")
-- 2. 触发
event:push("奔跑")
-- 3. 删除
event:rm("奔跑", "测试1")
-- 4. 删除这个对象所有监听
event:rmByTag(某个对象)
奔跑触发 → 推送到 NPC 文件里执行
不用 require,不用调用,完全解耦!
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第九课 后端面向对象和事件推送」,主讲:浮生梦。 课程体系:9…
代码不说话, 让它自己说 。 print 是 Lua 战士的第一件武器——用好它,八成的 bug 不用看第二眼。 <styl…
新手爱问「我怎么知道玩家上线了」—— 你不用知道,框架会喊你 。轮询是你去问,事件是它来叫:理解事件推送,才算入了框架的门。…
框架给你几百个接口, 本质都是同一件事:参数进去,结果出来 。把「调用约定」刻进肌肉,说明书再厚也不慌。 <style .i…
obj:method() 和 obj.method() 就差一个冒号, self 却是天壤之别 。Lua 的面向对象全靠这颗…
在 Lua 里, 函数不是「一段代码」,是一个「值」 ——能存进变量、塞进表、当参数传给别的函数。看懂这一点,回调、事件、框…