
在上一篇文章中,我们介绍了,怎么集成友盟的Cocos2d-x版本SDK,接下来我们来说下怎么将友盟的C++接口导出到Lua中使用。
编写.tolua文件引擎版本: Quick-Cocos2d-x 3.3 开发系统: windows 7 64bit
我们打开libmobClickCpp\include文件夹可以看到里面有两个文件,分别是:
| 1 2 | MobClickCpp.h MobClickJniHelper.h |
打开这两个文件看他们的内容可以发现,MobClickJniHelper.h的内容中只有一个
static voID setJavaVM(JavaVM *javaVM); |
而在MobClickCpp.h中包含了我们基本上能使用的所有的umeng的接口,所以我们需要导出的接口其实就是MobClickCpp中的接口。
新建一个MobClickLua.tolua文件,将下面的内容复制进去,我们再来详细分析下:
$#include "MobClickCpp.h" $ using namespace umeng; class MobClickCpp { public : voID setLogEnabled( bool value); voID setProxy( const char * host, int port); voID setSessionIDlelimit( int seconds); voID startWithAppkey( const char * appKey, const char * channelID = NulL); voID end(); voID mainloop( float dt); voID event( const char * eventID,153)!important; background:none!important">const char * label = NulL); voID beginLogPageVIEw( const char *pagename); voID endLogPageVIEw( const char *pagename); voID setUserLevel( const char *level); enum Sex{ Unkonwn = 0, Male = 1, Female = 2, }; voID setUserInfo( const char * userID,Sex sex, int age,153)!important; background:none!important">const char * platform); @H_100_419@ voID startLevel( const char * level); voID finishLevel( const char * level); voID failLevel( const char * level); voID pay( double cash, int source, double coin); const char * item, int amount, double price); voID buy( const char *item, double price); voID use( double price); voID bonus( double coin, int source); voID bonus( double price, int source); }; |
我们可以看到上面的内容基本上都是MobClickCpp.h文件中的接口。我们现在来详细说下这几个部分的意思。
第一部分的代码是:
这里的代码是引用代码,需要包含的头文件可以填到这里。
第二部分是这一句:
我们打开MobClickCpp.h的内容可以看到里面定义了一个命名空间为
namespace umeng{ } |
为了能在转出来的.cpp文件中使用umeng的接口,我们需要把命名空间引用过去。所以这里加了这一句话方便在.cpp文件中使用umeng命名空间。
第三部分就是我们具体的类的定义了,这里最好是直接拷贝.h文件中的类的声明。当然,你想自己定义一个类来作为中间层,也可以声明为自定义的层。这个时候记得要修改第一部分和第二部分的代码。
将.tolua文件转为luabinding c++代码在Quick-Cocos2d-x 3.3中自带了tolua++工具,位置在[QUICK_V3_ROOT]/quick/bin下面的win32或者是mac下,我们最好将它们都添加到系统的PATH环境变量中,方便下次使用。
在命令行下直接输入:
可以看到tolua++的帮助信息
usage: tolua++ [options] input_file Command line options are: -v : print version information. -o file : set output file; default is stdout. -H file : create include file. -n name : set package name; default is input file root name. -p : parse only. -P : parse and print structure information ( for deBUG). -S : disable support for c++ strings. -1 : substract 1 to operator[] index ( for compatibility with tolua5). -L file : run lua file (with dofile()) before doing anything. -D : disable automatic exporting of destructors for classes that have constructors ( for compatibility with tolua5) -W : disable warnings for unsupported features ( for compatibility with tolua5) -C : disable cleanup of included lua code ( for easIEr deBUGging) -E value[=value] : add extra values to the luastate -t : export a List of types asociates with the C++ typeID name -q : don't print warnings to the console -h : print this message. Should the input file be omitted,stdin is assumed; in that case ,the package name must be explicitly set. aaaaaa |
了解上面这些信息后,我们执行命令:
tolua++ -o lua_binding_MobClickCpp.cpp -H lua_binding_MobClickCpp.h MobClickCpp.tolua |
执行完成后将会生成两个文件:
生成的两个文件就是我们将.tolua的描述信息转为lua_binding的接口之后的.cpp和.h文件,这两个文件既可以放到引擎的目录下也可以放到工程目录下,这里为了描述方面我就把它们放到工程目录下了。
添加C++代码到工程中 拷贝上面的两个文件到工程下的umeng\frameworks\runtime-src\Classes目录,然后打开proj.androID_no_anysdk\jni下的AndroID.mk文件,给LOCAL_SRC_fileS加上../../Classes/lua_binding_MobClickCpp.cpp \,加上之后的LOCAL_SRC_fileS内容如下:
LOCAL_SRC_fileS := hellolua/main.cpp \ ../../Classes/VisibleRect.cpp \ ../../Classes/AppDelegate.cpp \ ../../Classes/ConfigParser.cpp \ ../../Classes/lua_binding_MobClickCpp.cpp \ |
打开proj.androID工程中的AppActivity.java文件,在函数onCreate中添加下面的语句:
打开AppDelegate.cpp文件,添加头文件
然后再在函数bool AppDelegate::applicationDIDFinishLaunching()中添加以下代码:
注意上面这一句添加的位置必须要在获取到lua_State之后。
接着分别在AppDelegate::applicationDIDEnterBackground和AppDelegate::applicationWillEnterForeground中分别添加
和
改完C++代码后,build_native编译C++代码。稍等片刻,我们等待C++编译完。
我们打开Quick-Cocos2d-x工程中的MyApp.lua代码文件,修改function MyApp:run()的内容为:
function MyApp:run() cc.fileUtils:getInstance():addSearchPath( "res/" ) self:enterScene( "MainScene" ) MobClickCpp:startWithAppkey( "5539bb6767e58e62eb000288" , "GooglePlay" ) end |
这里的5539bb6767e58e62eb000288是我们在umeng官网上创建APP的时候所给的AppKey。GooglePlay为我们所使用的渠道。
打开Eclipse,在手机上运行工程,我们可以在后台看到umeng的数据
打开应用的详细页面,点击渠道分析,里面有一个渠道列表的子选项,点击之后我们可以看到我们上传的渠道用户数量:
好了,友盟的C++版本在Lua的使用就介绍到这里,其他umeng的接口大家可以看下MobClickCpp.h文件中查看接口说明。
下一篇我们看在Lua里直接使用Java版本的umeng接口。
总结以上是内存溢出为你收集整理的Cocos2d-Lua(Quick-Cocos2d-x)集成第三方SDK(二)全部内容,希望文章能够帮你解决Cocos2d-Lua(Quick-Cocos2d-x)集成第三方SDK(二)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)