传奇广告查询第一站 同步54.com

lua脚本加载问题
原创 于2026-01-05 18:07:00发布
9 阅读
0
0

游戏中逻辑部分有很大部分都是通过lua脚本来实现的,脚本中的代码量甚至有可能超过游戏程序本身的代码量。这就涉及到大堆脚本的管理问题。

所有的脚本不是在程序启动时自动加载的,而是在需要调用到这个脚本的时候才加载。这是因为脚本数量庞大,可能还有很多是旧的已经弃用的游戏逻辑,如果全部加载,增加程序负担,不划算也没有必要。

可是用了延迟加载以后,另一个问题又出现了。lua脚本之间是可以互相调用的,例如有2个脚本A.lua和B.lua,

A.lua包含一个函数:

function funcA(p1,p2) return p2*funcB(p1); end

B.lua也包含一个函数:

function funcB(p) return p*100; end

程序调用函数funcA的时候会加载A.lua,A.lua又间接调用了B.lua的函数funcB,而B.lua不是由程序直接调用的,所有程序不会加载它,这样函数funcA并不能识别B.lua里定义的东西,因此返回的也是不正确的数据。

那是不是延迟加载就是错误的,必须在程序启动时加载所有的脚本呢?当然不是。

可以在程序中定义一个专门负责调用lua函数的供lua脚本使用的接口,比如:

static void callLuaFunc(const char* fileName, const char* funcName, ...) { //如果没有加载,就先加载脚本 if(unLoad(fileName)) load(fileName); //调用相关函数 callFunc(funcName); }

这个脚本是供lua脚本调用的,所以现在A.lua脚本要这么写:

function funcA(p1,p2) return p2 * callLuaFunc("B.lua","funcB",p1); end

这样,无论是程序直接调用或者通过其他脚本间间接使用的脚本,都可以保证它一定会被加载到了。

管理员
0
0
0
分享
上一篇: Lua语言脚本环境配置
下一篇: 检测当前人物是否在安全区脚本命令
评论
历史记录
回顶部
浏览时间 游戏名称 游戏IP 开区网址
注册GM1论坛账号
  • 上传头像
注册

已有账号,

微信扫码登录
重置密码
重置密码

注册

绑定关联手机号
关联手机号