Cocos2d-x是怎样实现跨平台?

原创 2016年12月20日 21:00:03

AppDelegate 作为跨平台程序入口,在这之上做了另一层的封装,封装了不同平台的不同实现。比如我们通常认为一个程序是由 main 函数开始运行,那我们就去找寻,我们看到了在 proj.linux 目录下存在 main.cpp 文件。在main.cpp 中 CCApplication::sharedApplication()–>run(); 这一句看起,这一句标志着, cocos2d-x 程序正式开始运行,现在定位到 sharedApplication() 方法的实现,在CCAplication类中我们可以看到从 sharedApplication() 方法,在调用 run() 方法,在这之前,我们需要调用到它的构造函数,否则不能运行,这就是为什么在 CCApplication::sharedApplication()–>run(); 之前,我们首先有语句 AppDelegate app; 而创建 AppDelegate 变量的原因是 AppDelegate 是 CCApplication 的子类,在创建子类对象的时候,调用其构造函数的同时,父类构造函数也会执行,然后就将 AppDelegate 的对象赋给了 CCApplication 的静态变量,而在 AppDelegate 之中我们实现了 applicationDidFinishLaunching方法,所以在 CCApplication 中 run 方法的开始处调用的就是 AppDelegate 之中的实现。而我们在此方法中我们初始化了一些变量,创建了第一个 CCScene 场景等,之后的控制权,便全权交给了CCDirector::sharedDirector()–>mainLoop(); 方法了。

 

cocos2d-x的文件夹下,有一个platform文件夹,里面存放了跨平台的封装接口。当前目录下有CCApplicationProtocol.h头文件,子目录有win32,Android,IOS三个文件夹,里面分别存放跨平台需要的函数,其中包括CCApplication。而AppDelegate 类则是继承自CCApplication。CCApplication又继承自CCApplicationProtocol。在CCApplicationProtocol中定义了applicationDidFinishLaunching虚方法,由CCApplication 继承, AppDelegate 实现的。以此实现了跨平台。

java输入→Jni→c++输入→c++处理(API实现)→c++输出→Jni→java输出 

而在Android 平台启动 cocos2d-x程序。可以找到Android 平台与上面等价的入口点,proj.android/jni/hellocpp/main.cpp。在main.cpp文件里面并没有看到 main 函数,这是由于不同的平台封装所以有着不同的实现,在 Android 平台,默认是使用 Java 开发,可以使用 Java 通过 Jni 调用 C++ 程序,而这里也正式如此。我们暂且只需知道,由 Android 启动一个应用,通过各种峰回路转,最终执行到了 Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit 函数,由此,变开始了我们 cocos2d-x Android 平台的程序入口处。,其它平台程序的入口必然包含着其它平台的不同封装实现 。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【cocos2d-x入门之四】cocos2d-x怎么实现跨平台

原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12610287 cocos2d-x到底是这样实现跨平台的...
  • fu_zk
  • fu_zk
  • 2013-10-11 10:38
  • 4196

【玩转cocos2d-x之四】cocos2d-x怎么实现跨平台

cocos2d-x到底是这样实现跨平台的呢?这里以Win32和Android为例。 1.跨平台项目目录结构 先看一下一个项目创建后的目录结构吧!这还是以HelloCpp为例。   ...

cocos2d-x如何实现跨平台

【cocos2d-x入门之四】cocos2d-x怎么实现跨平台 原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/126...

cocos2d-x跨平台之路(观点比较清晰)

本期我们采访的讲师是: 杨丰盛 梦拓科技创始人兼CTO,国内Android领域的先驱者和布道者,资深Android/IOS开发工程师、构架师。 开源国际化...
  • kepoon
  • kepoon
  • 2013-03-04 22:56
  • 3696

cocos2dx 为什么可以跨平台?

这篇文章 并非可以解答这个疑惑 . 只是为了 以后 最近 可以 回答 这个 疑惑.  众所周知, 安卓 是 基于 linux 的, 苹果 是基于 unix . linux 和 unix 都是 基于 ...

cocos2d-x 引擎分析:如何实现跨平台

怎么样使用 Cocos2d-x 快速开发游戏,方法很简单,你可以看看其自带的例程,或者从网上搜索教程,运行起第一个 Scene HelloWorldScene,然后在 HelloWorldScene ...

cocos2dx中IOS/Android跨平台微信登录和分享

现在微信应用太广泛,稍微有点社交属性的都会集成微信登录和分享功能。cocos2dx中要实现跨平台登录和分享,有点麻烦。虽然可以使用ShareSdk/友盟等集成,不过看帮助文档也是分平台去分别集成的。官...
  • pur_e
  • pur_e
  • 2016-01-18 19:36
  • 11567

cocos2d-x 实现跨平台的目录遍历

#ifdef _WIN32 #include #else #include #include #include #include #endif win32平台引用io.h里面的...

cocos2d-x 实现跨平台的目录遍历

转自:http://www.cnblogs.com/tickdream/p/3315726.html #ifdef _WIN32 #include #else #include #inc...
  • auccy
  • auccy
  • 2016-05-04 11:16
  • 64
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)