傻瓜也会lua-bindings(Cocos2d-x 3.8.1)(二)

本文详细介绍了在Cocos2d-x 3.8.1中如何处理官方工具无法自动导出的std::function类型参数的Lambda函数,通过手动绑定实现Lua与C++的交互。通过增加测试方法、导出类、编写测试代码并整理手动绑定与自动绑定的代码,确保测试成功并避免重复工作。
摘要由CSDN通过智能技术生成

通常有的函数使用std::function作为参数,官方自带的导出工具会提示不能导出,这时候需要我们手动绑定lua。



增加测试方法

打开上次的TestLua的win32工程,为TestClass增加一个testLambda方法

TestClass.h

#pragma once

#include "cocos2d.h"

class TestClass : public cocos2d::Ref
{
public:
    TestClass()=default;
    ~TestClass()=default;

    static void test1();

    void test();

    //新增的测试函数
    void testLambda(const std::function<void(const std::string&)> &callback);
};

TestClass.cpp

#include "TestClass.h"

USING_NS_CC;

void TestClass::test()
{
    CCLOG("Member function test");
}

void TestClass::test1()
{
    CCLOG("Static function test");
}

//新增的测试函数
void TestClass::testLambda(const std::function<void(const std::string&)>& callback)
{
    callback("Lambda test");
}

导出这个类

TestLua/frameworks/cocos2d-x/tools/tolua目录下按住shift+鼠标右键,点击在此处打开命令窗口,输入myGenbindings.py,然后回车

  • 回到visual studio 2015,打开lua_my_auto.cpp,可以看到导出了刚写的方法int lua_my_TestClass_testLambda(lua_State* tolua_S)

lua_my_auto.cpp

  • 这里我们可以看到官方导出对lambda不支持,需要我们自己手动编写代码。我们先修正导出的TestClass.h的include错误,再引入CCLuaEngine.h这个文件(手写代码需要用到)
#include "lua_my_auto.hpp"
#include "MyLuaBindings/TestClass.h" //修正
#include "tolua_fix.h"
#include "LuaBasicConversions.h"
#include "CCLuaEngine.h" //引入
  • 这里我们按照接收一个lua的function做为参数来写代码
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值