lua脚本加载问题

         游戏中逻辑部分有很大部分都是通过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

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

你可能感兴趣的:(游戏人生)