• Cocos2dLua3.17.2集成FairyGUI之 lua绑定 setHook()回调问题(四)


    在使用fairyGUI的时候,发现在使用setHook()设置回调的时候,没有效果,于是又去翻看源码。原来Lambda binding for lua is not supported.无法导出功能。只能手动修改了

    找到lua_cocos2dx_fairygui_auto.cpp文件,找到lua_cocos2dx_fairygui_Transition_setHook函数,注释掉里面无法导出的while循环。

      //      do {
            //    // Lambda binding for lua is not supported.
            //    assert(false);
            //} while(0)
            //;

    写入功能函数,整个函数修改如下

    int lua_cocos2dx_fairygui_Transition_setHook(lua_State* tolua_S)
    {
        int argc = 0;
        fairygui::Transition* cobj = nullptr;
        bool ok  = true;
    
    #if COCOS2D_DEBUG >= 1
        tolua_Error tolua_err;
    #endif
    
    
    #if COCOS2D_DEBUG >= 1
        if (!tolua_isusertype(tolua_S,1,"fgui.Transition",0,&tolua_err)) goto tolua_lerror;
    #endif
    
        cobj = (fairygui::Transition*)tolua_tousertype(tolua_S,1,0);
    
    #if COCOS2D_DEBUG >= 1
        if (!cobj) 
        {
            tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_fairygui_Transition_setHook'", nullptr);
            return 0;
        }
    #endif
    
        argc = lua_gettop(tolua_S)-1;
        if (argc == 2) 
        {
            std::string arg0;
            std::function<void ()> arg1;
    
            ok &= luaval_to_std_string(tolua_S, 2,&arg0, "fgui.Transition:setHook");
    
      //      do {
            //    // Lambda binding for lua is not supported.
            //    assert(false);
            //} while(0)
            //;
    
            LUA_FUNCTION handler = (toluafix_ref_function(tolua_S, 3, 0));
            cobj->setHook(arg0, [=]() {  

            LuaStack* stack = LuaEngine::getInstance()->getLuaStack();
            stack->executeFunctionByHandler(handler, 0);
            stack->clean();

            });
            if(!ok)
            {
                tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_fairygui_Transition_setHook'", nullptr);
                return 0;
            }
            
            //cobj->setHook(arg0, arg1);
            lua_settop(tolua_S, 1);
            return 1;
        }
        luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d 
    ", "fgui.Transition:setHook",argc, 2);
        return 0;
    
    #if COCOS2D_DEBUG >= 1
        tolua_lerror:
        tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_fairygui_Transition_setHook'.",&tolua_err);
    #endif
    
        return 0;
    }

    编译运行,回调生效啦

  • 相关阅读:
    列表的内置方法
    oracle安装教程
    大二暑假假期周进度01
    win 10安装Linux虚拟机教程
    需求工程——软件建模与分析阅读笔记05
    网络爬虫阅读笔记01
    Java 测试连接Oracle数据库是否成功,ojdbc7.jar包下载
    河北创新年报统计平台系统整体界面展示,与数据下钻
    java 三大框架 struct2部分 实现增删该查操作
    itextsharp生成pdf
  • 原文地址:https://www.cnblogs.com/whj0402/p/12205403.html
Copyright © 2020-2023  润新知