Cocos2d-x + Lua接iOS原SDK的实现案
相信很多朋友在使Cocos2d-x+Lua开发游戏时都遇到过接iOS原SDK的问题,如常见的接应内付SDK,告SDK或是些社交平台SDK等
等,我也没少接过这类SDK。这篇章主要是对我做过项中接iOS原SDK实现案的个总结,在这分享给家,希望对和家的开发
作都有帮助。
在展开正之前,先做点说明:
1.我这说的iOS原SDK是指那些完全Objective-C语开发,为原iOS程序设计的SDK。swift很好很强,不过我还没过,惭愧,不过语终
归只是表达式已,解决问题的思路都是样的;
2.这假设游戏的主要逻辑使lua实现,对于主要逻辑使C++实现的,本的思路样可,并且设计上更简单,接着往下看就知道了.
3.本以Quick-Cocos2d-x 2.1版本为例进讲解,主要因为这个是我之前做项得最多的个版本,-x新版本变动较,但是,还是那句话,解决
问题的思路是相同的。
-------------------正式开始的分割线-------------------
好了,我们正式开始。开门见!
解决这种接问题,实际上最主要是解决不同语交互的问题,旦跨过语交互的障碍,剩下的事情就so easy!
由于涉及到Lua、C++、Objective-C三种语,这个问题表上看起来错综复杂,但其实只要冷静地(=。=)梳理,我们便可以得到正确的思路。
因为我们游戏的逻辑主要是Lua实现的(前已经做过假设),SDK是Objective-C实现,所以这我们需要解决Lua与Objective-C的交互问题,
即最终希望达到的标是,在Lua层“调”Objective-C的代码(注意这的调是加引号的,间接的调),当Objective-C层收到SDK的回调,
再通知Lua。我们知道,Lua并没有简单的法直接和Objective-C交流,但是Lua可以通过Lua Binding和C/C++交流,我们又知道,C++和
Objective-C可以混编,即C++可以直接调(这调没引号,是真的直接调)Objective-C的代码。想到这,思路就很明显了,我们可以使
C++为Lua和Objective-C的交互充当桥梁,进实现Lua到Objective-C的交互。
根据上的分析,我们可以如下图表达我们的思路,我们这将语交互的过程分成了4个部分:
整个语交互的过程可以总结为:Lua调Lua Binding的C++接,C++接调混编的Objective-C接,Objective-C通过block形式的回调,将结
果通知给C++,C++通过Lua的C API将最终结果返回给Lua。这样趟下来,就完成了Lua与Objective-C的整个交互过程。
简单的说下这4部分:
1.Lua Binding
将C/C++接导出给Lua调的法,由于篇幅的原因这就不展开了,具体可以参考Lua的档,以及上其他地的章。
2.混编
Objective-C的优点就是可以和C与C++混编使,就像同个语样共存在个实现件。具体混编规则也不说了,这只提两个细节:
1)在XCode下混编的实现件后缀是.mm,不能是.cpp或者是.m;
2)混编的实现件引头件的地,C++或者C的#include,Objective-C#import,相互没有影响。
3.Block回调
Block是Objective-C个常棒的特性,更棒的是在Block还可以直接写C++代码:)具体想了解的可以看苹果官档。
其实在最初,我曾经尝试过使发送通知的式来实现Objective-C对C++的回调,即Objective-C收到SDK回调,给C++部分发送附带回调信息的通
知,虽然cocos2d-x中有现成的NotificationCenter来帮助实现,但这种式的个显易见的弊端是增加了C++代码和Objective-C代码的耦合度,
Objective-C部分也要混编C++调C++的NotificationCenter发通知,C++部分也要混编Objective-C代码,调C++的NotificationCenter收通知,这种
评论0
最新资源