因为以前对接过C++版的ShareSDK,所以这次对接起来比较轻松,然而这次对接lua版本的,所以就没有采用cocos2dx的文档,而是IOS和Android分开对接的。
先说一下IOS平台:
打开ShareSDK官网,找到对接IOS平台下的文档,然后按照文档上的介绍一一对接,当代码都集成好之后,在lua文件中,实现与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
{
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互调进行调用,关于互调,可参见引擎代码,有实例,很方便,也很简单