coco2d-x学习之程序启动流程

来源:互联网 发布:程序数据和相应的文档 编辑:程序博客网 时间:2024/05/11 21:15

coco2d-x称之为跨平台,但它跟Java的跨平台是两个概念。与其说是跨平台,不如说是各平台对Opengl ES的支持。如果平台不支持Opengl ES,我真不知道怎么来移植了。

  cocos2d-x在各平台的实现代码完全一致,你的工程只需要针对各平台做些配置工作即可,这点cocos2d-x的源码通过脚本都做好了。

  cocos2d-x是怎么跟各个平台入口联系起来的呢,我仔细看了下代码,分享一下。

  IOS:(xcode4.3.2,cocos2d-x2.0.1)看源码自带的HelloWorld例子。结构如下:


其中iOS组下的代码就是ios平台的相关代码。代码结构和平台相关代码在建工程时会自动创建。

入口是main函数,其中加载AppController,这个类完成了ios平台的环境初始化。大部分代码都是ios平台的代码,与cocos2d-x相关的只有两句:

[html] view plaincopy
  1. static AppDelegate s_sharedApplication;  
  2. cocos2d::CCApplication::sharedApplication().run();  

CCApplication是一个单例的类,而sharedApplication是其全局访问方法,获得其实例。AppDelegate私有继承CCApplication类,隐藏接口。

AppController.mm一开始定义一个static的AppDelegate就是要定义一个CCApplication的实例,然后调用run函数,看这个函数

[html] view plaincopy
  1. int CCApplication::run()  
  2. {  
  3.     if (applicationDidFinishLaunching())   
  4.     {  
  5.         [[CCDirectorCaller sharedDirectorCaller] startMainLoop];  
  6.     }  
  7.     return 0;  
  8. }  

调用applicationDidFinishLaunching()函数,这个由AppDelegate实现,从此程序进入coco2d-x引擎部分,后续就与平台无关了,都是c++实现。


Android:安卓部分比较简单,就是Java通过Jni调用C++实现。

通过cocos2d-x的源码目录下的脚本create-android-project.sh可以创建android工程,创建完成后会生成Android平台相关的Java层的代码,其实就是拷贝的cocos2dx/platform/android/java目录下的代码。看下源码自带tests工程的结构:

程序入口是TestsDemo,这是启动Activity,继承自Cocos2dxActivity。通过调用Opengl ES在android上的java接口来启用Opengl。就是上图中的Cocos2dxGLSurfaceView.java,这个类继承自GLSurfaceView,是Opengl的上层接口类。在android上,opengl的绘图是通过单独的线程来渲染的,必须实现一个渲染器Renderer,cocos2d-x中的渲染器就是Cocos2dxRenderer.java。在这个类中有一系列的native函数,如nativeInit、nativeTouchesBegin等,这些函数就是cocos2d-x的C++代码对Java层的接口函数。其中nativeInit是工程自带的Jni目录下的main.cpp通过Jni封装的,而其他的native函数是cocos2dx/platform/android/Jni下的封装,就是引擎已经封装好了。

cocos2d-x中,一个完整的android游戏分两部分,cocos2d-x库和Java部分,说白了就是C++部分和Java部分,默认的Java部分是固定好了的,一般不需要自己再修改,跟编译一般的android应用一样,用Eclipse就可以。C++部分就是用cocos2d-x实现游戏的部分,这部分需要用NDK来编译成动态链接库。C++部分跟ios下的C++部分完全一样。


原创粉丝点击