Object-C 和 lua的相互调用
来源:互联网 发布:centos 7 服务器配置 编辑:程序博客网 时间:2024/04/29 07:13
本文主要讲如何完成lua和object-c的相互调用。 lua是一种脚本语言,可以方便的移植到各种宿主语言中,并且可以支持热更新,在游戏开发中也能当做主要的语言来编写游戏的逻辑,但是要接入第三方(例如支付宝等)时需要在不同的平台上(比如Android和ios)分别接入,这是就需要oc和lua完成通信
首先cocos2d 对oc和lua调用进行了封装,这就更有利于我们调用
cocos/cocos2d/luaoc
函数原型:
- -- 调用Objective-C类的接口。
- -- @function [parent=#luaoc] callStaticMethod
- -- @param string className Objective-C类名
- -- @param string methodName Objective-C类方法名
- -- @param table args Objective-C类方法所需要的各种参数字典,key值为方法的参数名
- -- @return boolean#boolean ret (return value: bool) ok, mixed ret ok为是否调用成功, ok为true时,ret为Objective-C方法的返回值,ok为false时,ret为出错原因
- function luaoc.callStaticMethod(className, methodName, args)
- end
———————————————————————开始—————————————————————————————————
lua调用oc
.lua代码:
m.applePay = function (userid, price)
local luaoc = require("cocos.cocos2d.luaoc")
local className = “ApplePayMoney” —要调用的oc中的类名
local methodName = “payMoney” —要调用的oc中的类中的指定方法名 要注意的是:OC里被调用方法必须是类方法,也就是前面是“+”号的方法!
local args = {callBack = m.ocCallBack,userid = “1234",price = “500"} —要传递给OC的参数(以表的形式传输,OC层以字典的形式接收) 注意callBack参数
local ok = luaoc.callStaticMethod(className, methodName, args) —调用的返回值
end
--oc的回调方法
m.ocCallBack = function(str)
-- body
print(“oc回调lua成功”..str); —str即oc回传给lua的参数
end
end
object-C代码
1.创建一个类ApplePayMoney(lua中已经指定)继承自NSObject 将.m文件的后缀名改为.mm ( 可以实现oc与c的混编 )
2.在.mm文件中引入头文件:
#import"CCLuaBridge.h"
#import"CCLuaEngine.h"
报错:Undefined symbols for architecture x86_64: "CreateRSADataSigner(NSString*)时 因为在在该文件中调用了调用了DataSigner.m里面的一个方法
解决:把DataSigner.m也改成DataSigner.mm后缀
3.在ApplePayMoney创建一个类方法(+方法)
//苹果内支付(供lua端调用)
+ (void)payMoney:(NSDictionary *)dict{
NSLog(@"lua call ocFounction succeed");
NSString *userid = [dictvalueForKey:@"userid"];
NSString *userid = [dictvalueForKey:@"userid"];
NSString *price = [dictvalueForKey:@"price"];
//这里获取lua层的数据后 对数据进行操作(例如调用支付宝接口等) 将返回的数据再通过下面的方法回传给lua层
int handlerID = (int)[[dictobjectForKey:@"callBack"]integerValue]; // lua传输过来的回调lua的方法名 取inergerValue 这里可以将该id缓存在oc层的一个全局变量中 在合适的位置再回调lua层
LuaBridge::pushLuaFunctionById(handlerID);//压入需要调用的方法id
LuaStack *stack =LuaBridge::getStack(); //获取lua栈
stack->pushString(“oc传递给lua的参数"); //将需要传递给lua层的参数通过栈传递
stack->executeFunction(1); //共有1个参数 (“oc传递给lua的参数”),这里传参数 1
LuaBridge::releaseLuaFunctionById([ApplePayMoneysharedApplePayMoney].handleID);//最后记得释放
}
———————————————————————结束—————————————————————————————————
就是这么简单
0 0
- Object-C 和 lua的相互调用
- swift和object-c的相互调用
- LUA函数和C函数的相互调用
- LUA和C之间的函数相互调用
- LUA函数和C函数的相互调用
- C/C++与Lua的相互调用
- [LUA学习笔记03]LUA函数和C函数的相互调用
- Lua和Java的相互调用(配置)
- c++和lua的相互调用
- Unity3D和Lua之间的相互调用
- c++ 和 lua的相互调用
- lua和java的相互调用
- c与lua 相互调用
- lua与C相互调用
- Lua学习笔记6:C++和Lua的相互调用
- Swift Object-c 相互调用
- lua study & c与lua相互调用
- lua和c++相互调用
- 照片EXIF信息库EXIV2(c++)
- fragmentManager Androird对Fragemt的管理
- 顺序存储结构与链式存储结构的比较(也可以说的顺序表与链表的比较)
- 深入浅出——搞懂卷积神经网络误差分析(一)
- hadoop学习序曲之java基础篇--java集合类
- Object-C 和 lua的相互调用
- Android基础:Android权限
- Bash的位置参数:
- 【GDOI2016模拟赛4.22】总结
- mysql 5.6在线DDL建索引测试
- nrf51822连接微信---crc32计算
- hadoop学习序曲之java基础篇--java泛型以及集合类复习
- 产品学习梳理2-产品原型制作
- 获取最长单色子路径的长度