lua代码热更新

最近在学习lua,准备在下一个游戏中使用lua作为逻辑部分的开发语言。
看中两点,一个是代码不用编译,且容易实现热更新,c++的代码在工程规模大了之后,编译速度很慢,经常是改了几行代码,就要等待长达10几,甚至几十分钟的编译时间。这点对开发速度影响较大。第二,c++程序容易挂。虽然在这个项目中,做到了几乎不挂,但是这其中的对开发人员的要求太高了。基于上面两点,打算在下一个游戏中使用脚本语言作为主要的逻辑开发语言,提高效率,降低人员要求。

切入正题。

lua热更新很简单,常用的有dofile,require等方法。这里只涉及require方法

上代码:

------------------------------------------------
main.lua
------------------------------------------------

require "liba"
require "libb"
--dofile("libb.lua")
--print(package.loaded["libb"])

--print("load liba success!")
print("M> ")
while true do
    line = io.read()
    if line == "q" then
        break
    elseif line == "a" then
        f = liba.a("YES")
    elseif line == "b" then
        f()
        liba.a("NO")()
    elseif line == "reload a" then
        package.loaded["liba"] = nil
        require "liba"
    elseif line == "reload b" then
        package.loaded["libb"] = nil
        require "libb"
    elseif line == "v" then
        liba.version()
    elseif line == "c" then
        liba.call("&&")
    elseif line == "api" then
        liba.api("nono")
    end
end

----------------------------------------------------------------
liba.lua
----------------------------------------------------------------

liba = {}

function liba.version()
    print("1.0.3")
end

function liba.api(data)
    print(data)
end

function liba.call(d)
    libb.echo(d)
end

function liba.a(d)
    return libb.ec(d .. " 1.0.4")
end

return liba

------------------------------------------------------------
libb.lua
------------------------------------------------------------

libb = {}

function libb.echo(d)
    print(d)
    print("xx" .. d .. "yy")
end

f = libb.echo("yes")

function libb.ec(d)

    local function he()
        print(d)
        print("OK")
    end
--[[   
    local a = d
    local function ha()
        print(a)
    end
--]]   
    return he
end

return libb

需要注意一点,对于闭包函数的热更新。闭包函数中的upvalue的更新是个麻烦的问题,要么就禁止这样的写法,要么就在把所有这些函数都放入全局的列表,使用的地方引用全局列表中的项,在更新的时候,把全局表中内容修改后,再修改使用地方的引用项。这个过程还是有点麻烦的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值