tolua#的Examples-03_CallLuaFunction

关键代码:

    private string script =
        @"  function luaFunc(num)                        
                return num + 1
            end

            test = {}
            test.luaFunc = luaFunc
        ";

    void Start ()
    {
        lua = new LuaState();
        lua.Start();
        lua.DoString(script);

        //Get the function object
        func = lua.GetFunction("test.luaFunc");

        if (func != null)
        {
            //有gc alloc
            object[] r = func.Call(123456);
            Debugger.Log(r[0]);

            // no gc alloc
            int num = CallFunc();
            Debugger.Log(num);
        }

        lua.CheckTop();
    }

    void OnDestroy()
    {
        if (func != null)
        {
            func.Dispose();
            func = null;
        }

        lua.Dispose();
        lua = null;
    }

    int CallFunc()
    {        
        func.BeginPCall();                
        func.Push(123456);
        func.PCall();        
        int num = (int)func.CheckNumber();                    
        func.EndPCall();
        return (int)num;        
    }

start函数中获取到lua代码的function名:lua.GetFunction("test.luaFunc"),得到一个LuaFunction对象,可以有两种执行方式,
(1)有gc alloc : func.Call(123456) 之所以有gc内存分配,原因在于Call函数参数类型是object[] Call(params object[] args),为啥会有这个问题,就是引擎的问题了。但是对于tolua#来说也没有找到可变参数的替代类型,所以先用着吧。

(2) no gc alloc:这个方式没有gc内存分配,原因就是舍去了params object[] args,但是写法有些麻烦,所有的参数都要func.Push(123456);进去后,再执行func.PCall(); 调用,然后再通过num = (int)func.CheckNumber();拿到lua代码执行的返回值。

至于选择那种?是选择方便,还是高效,大家自己选择吧。

[本日志由 admin 于 2016-03-20 08:48 PM 更新]
上一篇: tolua#的Examples-02_ScriptsFromFile
下一篇: tolua#的Examples-04_AccessingLuaVariables
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭