微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

因为以前对接过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分享功能,有不懂的童鞋可以给我留言,也请大神指教。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐