加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2dx3.12-lua添加ShareSDK分享功能(朋友圈、QQ空间、微博)

发布时间:2020-12-14 17:10:37 所属栏目:百科 来源:网络整理
导读:因为以前对接过C++版的ShareSDK,所以这次对接起来比较轻松,然而这次对接lua版本的,所以就没有采用cocos2dx的文档,而是IOS和Android分开对接的。 先说一下IOS平台: 打开ShareSDK官网,找到对接IOS平台下的文档,然后按照文档上的介绍一一对接,当代码都

因为以前对接过C++版的ShareSDK,所以这次对接起来比较轻松,然而这次对接lua版本的,所以就没有采用cocos2dx的文档,而是IOS和Android分开对接的。

先说一下IOS平台:

打开ShareSDK官网,找到对接IOS平台下的文档,然后按照文档上的介绍一一对接,当代码都集成好之后,在lua文件中,实现与OC互调。

我是这样实现的,点击一个按钮,调用OC,贴代码:

local shareItem = cc.MenuItemFont:create("SHAREMENU")

shareItem:setPosition(cc.p(100,100))

local menu = cc.Menu:create(shareItem)

memu:setPosition(cc.p(0,0))

menu:setAnchorPoint(cc.p(0,0))

self:addChild(menu)

local function shareMenuBack(pSender)

IOSShare()

end

shareItem:registerScriptTapHandler(shareMenuBack)

然后主要实现IOSShare方法

function MainScene:IOSShare()

local luaoc = require("cocos.cocos2d.luaoc") --1

local className = "IOSShare" --2

local methodName = "share" --3

local function callback(arg) --4

print("result oc is ",arg.result) --5

end

local args = {callback = "1234",func = callback} --6

local ok = luaoc.callStaticMethod(classname,methodName,args) --7

end

分别说一下上面函数的意思:

第一行require("cocos.cocos2d.luaoc")是引入luaoc模块,通过观察引擎文件中的代码,可以看出来,lua版本对于对接OC已经进行了封装,因此我们可以直接用,

第二行是类名,

第三行是类中的方法名(即我们要调用的方法),第四行是用来回调的函数,也就是调用完OC之后,如果需要回调给lua的,可以在这个函数中进行编码,而参数是在oc回调的时候指定的,

第五行写了一个arg.result,刚才说了,参数是oc回调的时候指定的,所以这个result就是在oc代码里写的,我写的是result。

第六行是lua调用oc传入的参数,记得要把回调函数传进入,参数的格式的键值对的形式(与lua调用java不一样)

第七行是执行(参数是类名,方法名,参数),记住,lua与oc回调只能调用oc的静态函数,因为引擎里只封装了静态函数(callStaticMethod)

android与oc不同的是,执行的时候,还要传入参数的类型。

可参见引擎中的源码,比较清晰。

而IOSShare这个类,就是我们新建的了,这是个OC类,头文件是.h,源文件是.mm,因此在.mm文件中,我们可以用C++和OC实现混编。

接下来就是在OC中回调lua了

看一下IOSShare这个类:OC应该导入的头文件我就不说了

@interface IOSShare : NSObject{

}

+ (void)share:(NSDictionary*)dict; //这里一定是类方法,也就是静态函数

@end

//源文件

@implementation IOSShare

+ (void)share:(NSDictionary*)dict

{

//需要分享的代码,请参见ShareSDK IOS文档

int nFuncID = [[dict valueForKey:@"func"] intValue]; //"func"就是我们传入的参数的键,现在是获取它的值,也就是回调函数的id

//下面是OC回调lua

LuaObjcBridge::pushLuaFunctionById(nFuncID); //这里使用LuaObjcBridge这个类,因此需要包含头文件#include "platform/ios/CCLuaObjcBridge.h"

//注意:如果这个头文件找不到的话,请包含这个类的绝对路径

LuaValueDict item;

item["result"] = LuaValue::stringValue("success");

LuaObjcBridge::getStack()->pushLuaValueDict(item);

LuaObjcBridge::getStack()->executeFunction(1);

LuaObjcBridge::releaseLuaFunctionById(nFuncID);

}

@end

这样就可以实现oc回调lua了。

android分享的原理跟这个差不多,先到ShareSDK找android对接的相关文档,然后利用lua和java互调进行调用,关于互调,可参见引擎代码,有实例,很方便,也很简单

唯一的特点就是,只能调用oc和java的静态方法。

好了,就先说到这里,关于lua下ShareSDK分享功能,有不懂的童鞋可以给我留言,也请大神指教。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读