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怎么实现跨平台

cocos2d-x到底是这样实现跨平台的呢?这里以Win32和Android为例。 1.跨平台项目目录结构 先看一下一个项目创建后的目录结构吧!这还是以HelloCpp为例。   ...
  • jackyvincefu
  • jackyvincefu
  • 2013年10月11日 08:36
  • 12469

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

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

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

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

教你用Cocos2D-X开发跨平台移动应用

  • 2014年05月29日 14:07
  • 2.73MB
  • 下载

COCOS按钮优先级处理。cocos studio 的widget 和cocos组件 的问题

cocos studio 与cocos 组建优先级处理
  • u010664312
  • u010664312
  • 2016年07月16日 17:51
  • 726

Cocos Studio学习笔记第一篇--界面

大前天也就是周二被人问道:“对Cocos Studio2.0以后版本用法的了解。”当时我一时之间没法回答,因为Cocos Studio1.6我以前用过很长时间,2.0改版以后我知道改动已经面目全非了...
  • swordfishx82
  • swordfishx82
  • 2015年09月26日 21:09
  • 49305

cocos2dx 为什么可以跨平台?

这篇文章 并非可以解答这个疑惑 . 只是为了 以后 最近 可以 回答 这个 疑惑.  众所周知, 安卓 是 基于 linux 的, 苹果 是基于 unix . linux 和 unix 都是 基于 ...
  • fuming0210sc
  • fuming0210sc
  • 2014年12月19日 09:50
  • 464

Cocos2d 跨平台的搭建

在这里我们学习的版本是cocos2d-x-2.2.3 关于cocos2d的其他概念,有兴趣的朋友可以去官网看看, 关于cocos2d的主要功能 1.    流程控制:非常容易的管理不同场景之间的...
  • u012819638
  • u012819638
  • 2014年10月25日 11:56
  • 101

【基于Cocos Creator+Socket.io的联机对战黑白棋(3)】——心得若干

我并不会在这个系列讲黑白棋的逻辑设计细节,那些东西我觉得你应该自己看代码理解(主要是我没时间写了。。。)我来说一下对新手比较有启发意义的几点心得:1.跨场景访问变量在util下面有两个脚本 Con...
  • potato47
  • potato47
  • 2016年12月11日 11:18
  • 2795

cocos:有限状态机

StatusBase.h #pragma once #ifndef ___STATUS_BASE_H_ #define ___STATUS_BASE_H_ class PlayerObj; class...
  • yzr1183739890
  • yzr1183739890
  • 2016年04月01日 17:03
  • 302
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Cocos2d-x是怎样实现跨平台?
举报原因:
原因补充:

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