Cocos2d-x之回調Lua的函數

1.1 創建LuaHandler.h,方便其實控件增加該功能。

#ifndef __LUAHANDLER_H__
#define __LUAHANDLER_H__

#include "CCLuaEngine.h"

class LuaHandler
{
public:
    LuaHandler(): m_nLuaHandler(0){}
    virtual ~LuaHandler(){}

    // 註冊Lua回調函數
    virtual void registerLuaHandler(int nHandler)
    {
        unregisterLuaHandler();
        m_nLuaHandler = nHandler;
        LUALOG("[LUA] Add lua handler: %d", m_nLuaHandler);
    }

    // 取消註冊
    virtual void unregisterLuaHandler(void)
    {
        if (m_nLuaHandler != 0)
        {
            cocos2d::CCScriptEngineManager::sharedManager()
            ->getScriptEngine()
            ->removeScriptHandler(m_nLuaHandler);
            m_nLuaHandler = 0;
            LUALOG("[LUA] Remove lua handler: %d", m_nLuaHandler);
        }
    }

    // 獲取在Lua中註冊的Lua回調函數引用
    int getLuaHandler() { return m_nLuaHandler; };

    // 獲取Lua的堆,方法調用各種函數
    cocos2d::CCLuaStack *getLuaStack(void) 
    {
        cocos2d::CCLuaEngine *pEngine = (cocos2d::CCLuaEngine*)
        (cocos2d::CCScriptEngineManager::sharedManager()->getScriptEngine());
        return pEngine->getLuaStack();
    }
protected:
    int m_nLuaHandler;
};

#endif

1.2 使用LuaHandler.h

#include "LuaHandler.h"

class MyLayer: public CCLayer, public LuaHandler
{
public:
    // ... 省略

    void callback(void)
    {
        int mHandler = getLuaHandler();
        if (mHandler != 0)
        {
            CCLuaStack *pStack = getLuaStack();
            pStack->pushInt(1234);                           // 回調函數第一個參數
            pStack->pushString("abc");                       // 回調函數第二個參數
            pStack->executeFunctionByHandler(mHandler, 2);   // 2表示回調函數有兩個參數
        }
    }
};

1.3 創建MyLayer.pkg

class MyLayer: public CCLayer
{
    // ... 省略

    void registerLuaHandler(LUA_FUNCTION mHandler);
    void unregisterLuaHandler(void);
};
local function callback(f, t)
    cclog("第一個參數:" .. f .. ",第二個參數:" .. t)
end

local myLayer = MyLayer:create()
myLayer:registerLuaHandler(callback)    -- 註冊回調函數
myLayer:unregisterLuaHandler()          -- 取消註冊
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章