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()          -- 取消注册
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值