按照我自己的理解 游戏里面是一个lua脚本对应一个lua_state,每次服务器运行的时候把所有脚本都加载进内存 然后再用就可以了 是这样吗
这样好像比较耗内存吧?
一共一个lua state
你那样太耗内存,脚本之间也不可以互相require
晕 那和我理解出入有点大了啊 那么现在有2个情况了: 是服务器启动的时候加载所有的脚本还是需要的时候在luaL_loadfile呢?
大部分都是启动时候载入
有些部分可以动态载入
这样的话一个lua_state里面可以同时加载多个脚本文件咯? 这样所有的脚本里的函数名得保证不重名吧?
动态载入也是用luaL_Loadfile吗? 载入后怎么释放呢?
lua也可以用module的方式,防止重名
载入后为啥要释放?
一般都是不释放,预加载
这样调用效率高
好吧 我理解了 我产生这个问题是这样的 传奇用的pascal脚本,他是每个npc一个脚本,每个npc都相当于有一个lua_state的对象 在程序启动的时候加载所有脚本 每个npc调的时候都调自己的 然后今天看一个游戏源码 他只有1个lua_state这就和传奇的设计不一样了 所以我就过来求证一下 哈哈
是的,只有一个luastate
那按照一个lua_state的方式的话 我得根据npc的信息来操作栈?
npc可以绑定一个lua脚本
什么意思? npc绑定脚本是什么意思?
这个脚本加载到lua_state里面后 怎么定位呢? npc名字?
npc创建的时候,绑定一个lua脚本名
比如响应点击npc事件
call(scriptName, 'main')
你意思是 scriptname就相当于module名 我在实现这个call的时候 实际上相当于lua_pcall(scriptname.main)这样的形式?
对的
module(..., package.seeall) 这种方式可以避免重名
好的,大概懂了 我再研究研究 谢谢了啊
好的
这样好像比较耗内存吧?
一共一个lua state
你那样太耗内存,脚本之间也不可以互相require
晕 那和我理解出入有点大了啊 那么现在有2个情况了: 是服务器启动的时候加载所有的脚本还是需要的时候在luaL_loadfile呢?
大部分都是启动时候载入
有些部分可以动态载入
这样的话一个lua_state里面可以同时加载多个脚本文件咯? 这样所有的脚本里的函数名得保证不重名吧?
动态载入也是用luaL_Loadfile吗? 载入后怎么释放呢?
lua也可以用module的方式,防止重名
载入后为啥要释放?
一般都是不释放,预加载
这样调用效率高
好吧 我理解了 我产生这个问题是这样的 传奇用的pascal脚本,他是每个npc一个脚本,每个npc都相当于有一个lua_state的对象 在程序启动的时候加载所有脚本 每个npc调的时候都调自己的 然后今天看一个游戏源码 他只有1个lua_state这就和传奇的设计不一样了 所以我就过来求证一下 哈哈
是的,只有一个luastate
那按照一个lua_state的方式的话 我得根据npc的信息来操作栈?
npc可以绑定一个lua脚本
什么意思? npc绑定脚本是什么意思?
这个脚本加载到lua_state里面后 怎么定位呢? npc名字?
npc创建的时候,绑定一个lua脚本名
比如响应点击npc事件
call(scriptName, 'main')
你意思是 scriptname就相当于module名 我在实现这个call的时候 实际上相当于lua_pcall(scriptname.main)这样的形式?
对的
module(..., package.seeall) 这种方式可以避免重名
好的,大概懂了 我再研究研究 谢谢了啊
好的