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相关的只有两句:
- static AppDelegate s_sharedApplication;
- cocos2d::CCApplication::sharedApplication().run();
CCApplication是一个单例的类,而sharedApplication是其全局访问方法,获得其实例。AppDelegate私有继承CCApplication类,隐藏接口。
AppController.mm一开始定义一个static的AppDelegate就是要定义一个CCApplication的实例,然后调用run函数,看这个函数
- int CCApplication::run()
- {
- if (applicationDidFinishLaunching())
- {
- [[CCDirectorCaller sharedDirectorCaller] startMainLoop];
- }
- return 0;
- }
调用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++部分完全一样。
- coco2d-x学习之程序启动流程
- coco2d-x学习之程序启动流程
- coco2d-x学习之程序入口
- coco2d-x学习之程序入口
- cocos2d-x或coco2d学习之杂谈
- coco2d-x学习笔记
- Cocos2d-x之 IOS工程平台程序启动流程分析
- coco2d-x 学习笔记2
- coco2d学习之CCNodeColor
- coco2d-x分析之LoadingScene
- cocos2d-x-3.1 win32程序-初识源码(coco2d-x 学习笔记二)
- cocos2d-x-3.1 数据结构之Vector (coco2d-x 学习笔记六)
- coco2d-x跨平台学习1
- coco2d-x开发之文字的设置
- 【4】coco2d-x核心类之CCDirector
- 【7】coco2d-x核心类之CCAction
- coco2d-x起点2之环境搭建
- 【3】coco2d-x 核心类之CCNode以及coco2d-x的坐标系
- 树的三种递归、非递归遍历
- Android XML解析学习——Sax方式(续) .
- 关于 Java Collections API 您不知道的 5 件事
- AndroidJNI 通过C++调用JAVA
- centos 下重启nginx
- coco2d-x学习之程序启动流程
- Windows7 以管理员方式运行CMD命令的快捷方式
- Sudoku
- LeetCode:N-Queens II
- BB10 读取NFC tag
- rdp2tcp Tunneling Tool 0.1
- 《设计师要懂的心理学》读书笔记(一)
- 在iphone越狱机器中使用Hook
- redis 批量删除key,与出现的问题解决(MISCONF Redis is configured to save RDB snapshots)