之前写了cocos2dx-luaj与android交互,接下来记录下在cocos2dx开发过程中lua与oc的交互。
cocos2dx中lua调用oc
同样cocos也为我们提供了cocos.cocos2d.luaoc
类,也仅包含一个方法:callStaticMethod
,与luaj相比只少了一个sig参数,源码如下:
1 | local luaoc = {} |
同样的也是在OC层提供了一个LuaObjcBridge
的类,注册了一个callStaticMethod
的方法。
1 | void LuaObjcBridge::luaopen_luaoc(lua_State *L) |
使用
- oc 方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17// 无参数
+ (void) CreateCamera{
NSLog(@"到iOS 平台了");
//... todo
}
// 一个lua委托参数
+ (void) DoTakePic: (NSDictionary *)dict{
// 获取lua方法的ID
int luaFunc = (int)[[dict objectForKey:@"lua_func"] intValue];
// 全局保存一份
luaCallbackFunc = luaFunc;
// ...todo 拍照
//保存图片后
//[[CameraManager GetInstance] execLuaFunc];
} - lua调用方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18local OC_CLASSNAME = "CameraManager"
-- 不传参数的方法
function CameraUtil:CreateCamera()
if device.platform == "ios" then
local luaoc = require("cocos.cocos2d.luaoc")
luaoc.callStaticMethod(OC_CLASSNAME, "CreateCamera", nil)
end
end
-- 传递委托方法到oc
function CameraUtil:TakeCameraPic(saveImgCallBack)
if device.platform == "ios" then
local luaoc = require("cocos.cocos2d.luaoc")
-- 需要把参数包装成表(OC中对应字典)
local param = {lua_func = saveImgCallBack}
luaoc.callStaticMethod(OC_CLASSNAME, "DoTakePic", param)
end
end
上面两个例子就描述了lua调用oc过程中传参与不传参的情况,但是oc端拿到lua的委托方法要如何进行调用呢?继续往下看:
1 | #import "cocos2d.h" |
好啦.