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分享功能,有不懂的童鞋可以给我留言,也请大神指教。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |