Cocos 2 dLua 3.17.2集積FairyGUIのluaバインドsetHook()コールバック問題(四)

7115 ワード

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; }

コンパイル実行、コールバックが有効になりました