如何把lua的函数作为回调函数当参数传给c代码

最近一段时间在lua的新闻组总是碰到这样的问题了。游戏中类似的问题很多,比如设置trigger,当玩家升级死亡的时候调用脚本函数。

初级方法,全局的LuaState,全局函数,把函数名注册到trigger中去。

进一步,希望支持匿名函数或者closure,那么用luaL_ref把函数记录下来并注册

更进一步,希望支持coroutine,那么把LuaState和ref一起注册

注意到,在coroutine也要记录注册的对象,在coroutine结束的地方需要取消注册。如果不这么做,而是武断的:

co = nil
collectgarbage 'collect'

此时当然会crash!

posted on 2011-11-01 21:56  风行水上  阅读(2464)  评论(0编辑  收藏  举报