代码改变世界

cocos2d-x for android:HelloWorld 解读

2012-10-28 09:01  Terry_龙  阅读(10542)  评论(0编辑  收藏  举报

上一篇文章说到,执行create-android-project.sh脚本会生成一个android 项目。该android 项目会有三个目录分别为

 


cocos2d-x 生成的项目列表 

proj.android:上文说过,是android 运行的项目工程

Classes:是上面android 工程运行时的NDK库,所有可以跨平台的以C++编写的代码都放在该目录,然后以NDK的方式编译成SO动态库,供android 项目调用,原生编译出来的工程有四个文件

 

Resources:是存放so动态库需要的资源文件比如图片、音频等 

 

cocos2d-x的makefile文件

要清楚的知道它是如何把Classes文件编译成so动态库给android 项目调用的,就需要看看它的makefile如何编写。再次进入proj.android会看到一个jni目录,cd进去会看到

 

这里最重要的两个为Android.mk文件和hellocpp目录,而Application.mk暂时还不清楚做了什么,好像提供了一些标准模板库之类的东西,也不是太清楚,这里就不误导人了。而list.sh是一个脚本文件,这里也不做深究。

Android.mk:jni编译时需要的makefile文件


我们最主要看上面这四个字段 

LOCAL_MODULE_FILENAME:代表编译出来的so库名称,会点ndk 的朋友都知道。

LOCAL_SRC_FILES :所要编译的CPP文件,这里可以看到,它还是跑到了Classes目录找那两个cocos2d的CPP文件。main.cpp是对应的jni文件,感兴趣的朋友可以看看它是如何通过jni渲染到android 上面的。自己要多添加自己的Scene界面,就需要将CPP文件按上面的格式添加。

LOCAL_C_INCLUDES :对应Classes目录的cocos2d-x的h(头)文件。

LOCAL_WHOLE_STATIC_LIBRARIES :该cocos2d-x在android 环境下需要信赖的静态库,一般不需要更改这里,除非自己要添加自己的功能需要信赖到第三方库才需要添加到这里来

到了这一步,大致了解了它是如何通过jni编译成动态库提供给android使用的了。

 

在cocos2d-x的库文件中添加日志的支持


其实提供日志支持,只是调用的标准的ndk日志模块而已,在这里说出来只是方便大家不用再多查找而已 ,也可以在 这里 查看我以前写过的一篇关于NDK的文章。

cocos2d-x 生成的android 项目,在makefile 文件中以经支持了logcat框架,我们要使用可以直接引入日志的头文件然后再定义日志的输出格式即可,方法很简单,看下方

 

然后呢,就可以使用LOGD添加调试打印了,如:LOGD("Application -->AppDelegate::applicationDidFinishLaunching");  

 

关于AppDelegate 

AppDelegate 是用来通过从你手上的移动设备接收消息的方式跟踪应用程序的状态变化。例如,它可以确定什么时候用户接电话,或者什么时候内存占满。应用程序接收的第一个消息是AppDelegate::applicationDidFinishLaunching方法。这个地方是所有启动代码都会走的函数,也是cocos2d-x初始化的地方。

该文件位于:./template/android/Classes/AppDelegate.h

cocos2d-x 的基本生命周期

1.标准启动模式 

从运行应用程序到展示内容给用户看所经历的生命周期是

 

首先经过AppDelegate的构造函数

AppDelegate::AppDelegate()                      
{                                                                                   
   LOGD("Application -->AppDelegate::AppDelegate");                               
}    

 再进入到应用程序的启动函数

 

 函数里面初始化HelloWorld这个场景,然后显示这个场景,场景会自动调用初始化实例,cocos2d大量使用SingleTon设计模式呀。

 

 2.后台模式

 在标准模式上,我们按下锁屏键,然后再解锁屏,这时的生命周期是这样的

 

AppDelegate::applicationDidEnterBackground :此时,程序进入后台模式

AppDelegate::applicationWillEnterForeground :此时,程序被激活

 

好了,到了这一步,总算是对它有些了解了,接下来打算跟着博客园的游戏牛人 nowpaper 把它的一些游戏改成for android的,素材难找呀!!!!