模块就是工具箱。后端命令八百多个,记不住很正常——把自己常用的封装起来,按名字调用。
include("我的模块.lua") -- 每次都加载
require("我的模块") -- 只加载一次
| include | require | |
|---|---|---|
| 加载次数 | 每次 | 一次(内存有缓存就不加载) |
| 适合 | 经常热更、小文件 | 启动时初始化、大模块 |
线上频繁重载 QF、模块又多,优先 require,省内存、少重复。
我的模块.lua
local P = print
P("我是我的模块")
QF 顶部
include("我的模块.lua")
注意加载顺序:Lua 从上往下读。调用写在定义前会报 尝试 call 空值。定义/加载放上面,调用放下面。
-- 封装.lua
local T = {}
function T.getName(actor)
return GetBaseInfo(actor, 1)
end
function T.getLevel(actor)
return GetBaseInfo(actor, 6)
end
return T
-- QF
local t = require("封装") -- 或 include + 接收返回值
print(t.getName(actor))
print(t.getLevel(actor))
return T 把工具箱交出去;外面用局部变量接,避免全局被覆盖。
若模块里写全局 T = {...},别人也写个 T = 123,你的方法就没了。
局部 + return = 私有化,谁拿到返回值谁才能用。
local T = {
getName = function(actor) return GetBaseInfo(actor, 1) end,
getLevel = function(actor) return GetBaseInfo(actor, 6) end,
}
getName = function(...) 是匿名函数赋值给主键,和 function T.getName() 本质一样。
actor 是引擎回调参数。全局脚本顶层没有“是谁”,拿不到对象。练手可以先写在奔跑/聊天触发里。
今日练习:写 封装.lua 导出 getName / getLevel,在奔跑触发调用;再故意用同名全局覆盖,观察报错,改成 return 后修复。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
模块就是 工具箱 。后端命令八百多个,记不住很正常——把自己常用的封装起来,按名字调用。 一、include 与 requi…
会判断了,就能做会回话的 NPC。今天拼一个简易 GM 工具界面。 一、用 say 吐出界面 客户端编辑器 Ctrl + F…
与或非听起来玄,其实就是三张通行证。 一、and(与)= 过安检 机票 + 身份证 ,少一样不让过。后面还能无限加条件。 二…
判断 = 比较 + 分支。今天把三种 if 写法、以及工程里最好用的「防卫语句」一次练透。 一、三种判断结构 elseif …
表会建、会取、会增删改查,最后一环是 遍历 。本篇先把坑标出来,下节课正式拆迭代器。 本课互动训练 :专属动画 + 选择题测…
「我只改了 b,a 怎么变了?」——这是表引用问题的标准嚎叫。今天把钥匙和锁彻底讲清。 本课互动训练 :专属动画 + 选择题…