CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
Lua速成班后端面向对象事件推送996引擎

Lua速成班 第九课 后端面向对象和事件推送

2026-10-30 23:26 作者:浮生梦 Lua速成班后端面向对象事件推送996引擎
本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第九课 后端面向对象和事件推送」,主讲:浮生梦。 课程体系:996 引擎传奇开发教学 · 威海旷世互娱教学基地

一、核心结论(超级重要)

  1. 后端必须用面向对象,不是为了炫技,是为了能维护、能迭代
  1. 面向对象那 3 倍耗时是微秒级,人完全感觉不到
  1. 学习顺序一定是:先会用 → 再懂原理,不要一上来啃底层
  1. 事件系统(QF)不是累赘,是让代码干净、解耦、不用互相require的神器
  1. 游戏后端架构 = 玩家对象 + 二级子系统(item/var/map/skill)+ 事件总线

二、【面向对象】最通俗解释

你反复强调的那段 Lua 面向对象,我给你总结成死记硬背 4 行:

lua
-- 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 = 你创建出来的对象自己

三、你讲的【二级模块封装】(最牛实战架构)

你现场写的:

lua
player.item = Item.new(player)
player.var = Var.new(player)
player.map = Map.new(player)
player.skill = Skill.new(player)

你讲的目的:

  1. 功能分类,绝对不乱
  1. 每个子系统只干自己的事
  • item:管道具
  • var:管变量
  • map:管地图
  1. 调用超级清爽:
lua
player.item:give("木剑", 1)
player.var:set("次数", 100)
player.map:goTo(1001)

你强调的重点:

  • 子系统里用 self.actor 拿到玩家ID
  • 这是为了长期维护 + AI 自动生成代码

四、你讲的【QF事件系统】终极大白话

你讲了最核心的一句话:

QF事件 = 一个发通知、收通知的管理员

你举的成就系统例子(最经典)

  • 不使用事件:

死亡→写成就、打怪→写成就、获得货币→写成就
代码散得到处都是,改不动

  • 使用事件:

所有地方只需要写一行:

lua
  event:push("玩家死亡", actor)
  event:push("打怪完成", actor, mid)
  

成就系统里统一监听处理:

lua
  event:add("玩家死亡", function(actor)
      -- 死亡计数+1
  end, "成就系统")
  

你总结事件本质(超级简单)

  • add:往表里塞一个函数
  • push:遍历表里的函数,全部执行一遍
  • rm:从表里删掉函数
  • 就是表的增删改查

你讲的QF高级功能(都是为了安全)

  • tag:唯一ID,方便删除
  • once:执行一次就消失
  • depth派发锁:防止遍历的时候删表崩溃
  • dead墓碑:先标记死亡,最后统一清理
  • pcall:报错不崩服

五、你讲的【QF完整用法】(你现场演示版)

lua
local event = QF.new()

-- 1. 监听
event:add("奔跑", function()
    print("我在跑")
end, "测试1")

-- 2. 触发
event:push("奔跑")

-- 3. 删除
event:rm("奔跑", "测试1")

-- 4. 删除这个对象所有监听
event:rmByTag(某个对象)

你最震撼的演示:

奔跑触发 → 推送到 NPC 文件里执行
不用 require,不用调用,完全解耦!


六、你最后给新手的忠告

  1. 接口一定要自己走一遍,这是基本功
  1. 不要一上来研究底层怎么实现,先会用
  1. 面向对象是为了长期迭代
  1. 事件系统一定要会,代码干净10倍
  1. 架构 = 玩家 + 子系统 + 事件

本文为《Lua速成班》系列课程实录整理。想系统学习 996 引擎 Lua 开发,请查看课程中心与更多技术文章。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

Lua速成班后端面向对象

Lua速成班 第九课 后端面向对象和事件推送

本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第九课 后端面向对象和事件推送」,主讲:浮生梦。 课程体系:9…

2026-10-30 23:26 浮生梦
幂尔框架接口调用

print 大法:让代码自己交代问题

代码不说话, 让它自己说 。 print 是 Lua 战士的第一件武器——用好它,八成的 bug 不用看第二眼。 <styl…

2026-10-26 19:04 996 技术组
幂尔框架接口调用

事件推送:别问,等框架喊你

新手爱问「我怎么知道玩家上线了」—— 你不用知道,框架会喊你 。轮询是你去问,事件是它来叫:理解事件推送,才算入了框架的门。…

2026-10-26 19:04 996 技术组
幂尔框架接口调用

接口调用的本质:参数进去,结果出来

框架给你几百个接口, 本质都是同一件事:参数进去,结果出来 。把「调用约定」刻进肌肉,说明书再厚也不慌。 <style .i…

2026-10-26 19:04 996 技术组
幂尔框架接口调用

点号与冒号:self 到底是谁

obj:method() 和 obj.method() 就差一个冒号, self 却是天壤之别 。Lua 的面向对象全靠这颗…

2026-10-26 19:04 996 技术组
幂尔框架接口调用

函数是一等公民:把函数当值传来传去

在 Lua 里, 函数不是「一段代码」,是一个「值」 ——能存进变量、塞进表、当参数传给别的函数。看懂这一点,回调、事件、框…

2026-10-26 19:04 996 技术组