关于cocos的跨平台

今天任务是看一部分cocos的源码,了解cocos中java层和c++层的调用关系。这里要明白cocos中java和C++的调用,那么就得先明白几个问题:

1、什么是JNI,它解决了什么问题?

2、JNI传入参数的含义?

3、Cocos程序如何在安卓平台跑起来的?

JNI 是Java本地接口,是一种技术手段。能够完成Java 虚拟机 (VM) 内部运行的 Java代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行互操作。那么这样一来就解决了

(1)java层调用C/C++代码

(2)Native层调用java代码

那么什么是native层呢?

Native可以理解成安卓中的本地框架层。主要是一些本地服务和链接库。这一层是通过C/C++实现的。然后这一层要实现的部分复杂的运算,同时要和上层java实现通信时。就需要刚刚说到jni机制了。当然这一层也还可以和下层硬件驱动的交互。

  

  接下来我们知道jni层也就容易找到在我们自己的demo中,有一个函数是

using namespace cocos2d;

void cocos_android_app_init (JNIEnv* env, jobject thiz) {
    LOGD("cocos_android_app_init");
    AppDelegate *pAppDelegate = new AppDelegate();
}

这个函数的两个参数的类型,按JNI的功能来说,以肯定是java运行环境的本身信息,和java的实例。然后穿进去才可能实现java和C++的调用。那么JNIEnv * 是什么呢?这个的确是细节,可以不去扣。但是可以这么想一想。为什么会出现java和C++的交互困难。不就是因为java和c++都有各自的独立内存空间而造成的么。而java是运行在虚拟机上的。虚拟机是一个进程,进程中可以跑很多线程。这个进程中的多个线程都是共享该进程内部信息的。

  所以可以认为第一个参数是和线程相关的一个变量,供C寻址。找到java的运行环境。再加上第二个参数的实例化从而实现交互。再往里深究一下,会发现cocos_android_app_init(JNIEnv * env. Jobject thiz)是在cocos/planform/android中的javaactivity-android.cpp中被调用,实现必要的初始化。而这个javaactivity-android.cpp文件中还有一个函数,直接给出了

auto director = cocos2d::Director::getInstance();

auto glview = director->getOpenGLView();

这里也就是我们用vs开发的时候看到的一句话。导演接管。

但也注意到之前的这个函数只在这出现了一句 new AppDelegate();我们知道在win32下,这里就可以找到程序入口了。所以这个很容易想到了第3个问题。所以cocos在安卓平台上如何实现的?

  首先,可以说cocos是因为各个平台对opengles支持性。在知乎王哲说过这么一句话“Cocos2d-x的跨平台层,很大程度得益于OpenGL ES标准在不同手机平台上都可以运行,即使在wp8上也有Angel Project把OpenGL ES调用转换到DirectX,所以我们一套OpenGL ES调用可以横跨iOS, Android, WP8三个主要平台”。

  其次安卓上的入口,其实就是上面提及到的

void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv*  env, jobject thiz, jint w, jint h)

{

    auto director = cocos2d::Director::getInstance();

    auto glview = director->getOpenGLView();

    if (!glview)

    {

        glview = cocos2d::GLViewImpl::create("Android app");

        glview->setFrameSize(w, h);

        director->setOpenGLView(glview);

        //cocos_android_app_init(env, thiz);

        cocos2d::Application::getInstance()->run();

    }

而之后是什么怎么进行,也还在研究中。时间不早了,明天继续。

时间: 2024-08-04 18:44:02

关于cocos的跨平台的相关文章

购买李宁Cocos2d-x套餐,送最新出的《Cocos2d-x游戏实战指南》签名书一本

活动时间:2016-10-18至2016-11-30 通过本套餐,可完全了解Cocos2d-x 3.x的相关技术,以及掌握C++语言,并具有一定的项目实战经验. Cocos2d-x游戏开发套餐:http://edu.51cto.com/pack/view/id-114.html <Cocos2d-x游戏实战指南>封面 本书月底出版,触控科技副总裁Jane.微软开放体验和合作事业部开发技术顾问梅颖广.51CTO学院运营总监曹亚莉.哈尔滨工业大学  王峥  联袂推荐 目录 第1章     初识CO

跨平台编译coocs2d-x工程

1.文件路径问题.鉴于我们要实现跨平台处理,就要处理不同IDE对于文件路劲的管理.在VS中,代码管理完全按照物理路径去管理,剩下的部分是资源路径问题.在win7-vs2012以上的版本(vs110_xp对应版本设置再去搜索吧,已过去的工具就该放弃)可以选择在Debugging中的Working  Directory的值从$(ProjectDir)设置为$(ProjectDir)../Resources.但这要求每次增加资源或修改文件名也要同步在mac工作平台修改文件映射. 为放弃上面单平台管理的

Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工具——Visual Leak Detector

那么在Windows下有什么好的内存泄漏检测工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检测功能,我们可以使用第三方工具Visual Leak Detector(以下简称vld). vld工具是VC++环境下一款小巧易用.免费开源的内存泄漏检测工具,vld可以显示导致内存泄漏的完整内存分配调用堆栈.vld的检测报告能够对每个内存泄漏点提供完整的堆栈跟踪,并且包含其源文件及行号信息. 安装过程是,先在到地址http://vld.codeplex.com/下载vld安

Cocos Creator—如何给资源打MD5版本号

Cocos Creator 是Cocos最新一代的游戏开发者工具,基于 Cocos2d-x,组件化,脚本化,数据驱动,跨平台发布.Cocos Creator的开发思路已经逐步跟Unity 3D靠拢,写起来也更方便快捷,开发效率更高. 但既然是新东西,免不了各种坑.其中在发布Web Mobile平台上,就有各种小问题,例如给资源加上md5版本号,Cocos Creator就不支持.从16年底开发组就说要支持MD5 Cache,等了大半年,新的1.6内测版本终于增加了MD5 Cache的功能,但效果

Cocos数据篇[3.4](6) ——SQLite3数据库基础用法

[唠叨] 在Cocos2d-x中,简单数据存储,可以使用UserDefault.那么如何存储大量,不规则的数据?我们可以使用 SQLite数据库 存储数据.SQLite 是使用非常广泛的 嵌入式数据库 ,它有小巧 .高效.跨平台.开源免费和易操作的特点.所以大量的被用于手机.PDA.MP3播放器.以及机顶盒设备. SQLite数据库是使用C语言来编写的,因此在Cocos2d-x使用SQLite也是得心应手. 本文介绍一下SQLite3数据库的基础用法:增删改查. PS:另外对于SQLite的可视

从cocos2dx源代码看android和iOS跨平台那些事

cocos2dx一个跨移动(平板)平台的游戏引擎,支持2d和3d,基于c/c++,网上介绍多在此不详叙.我们本篇关心的是跨平台那些事,自然而然就找到platform目录.好家伙,支持的操作平台还真不少,最吸引我们关注的可能就是字母顺序排列的头二个平台,android和apple.然后顺带会看一看winrt和linux.platform这个目录,物如其名,就是一些使用到平台服务的东西(封装).platform目录下各平台子目录封装的平台服务都大同小异,唯android目录特殊还多了jni和java

cocos android分析

cocos2d-x Android环境搭建 cocos2d-x环境搭建比较简单,但是小问题还是不少,我尽量都涵盖的全面一些. 下载软件 cygwin.NDK(ADT):C++相关 如果之前没有Android开发环境,还需要Android SDK,Eclipse cocos2d-x源码 我的环境为ndk r7,cygwin1.7,Android SDK为2.2和3.0.另外,我是通过真机调试,在模拟器上不行,估计还是我T410显卡的问题. 安装cygwin,在cygwin文件进行路径设置 在cyg

(转)VS2015的跨平台特性会对Qt带来冲击吗

VS2015的跨平台特性会对Qt带来冲击吗 原文来自:http://qiusuoge.com/13352.htmlvs2015支持c++开发跨平台的库,这样对于Qt而言会有多大的冲击呢?将来用VS开发c++跨平台和QT开发跨平台应用发展趋势各是怎样的?如果现在新项目要开发跨平台的高性能应用,如果用c++是选择QT还是VS2015的跨平台特性呢?另外VS2015跨平台对于界面的支持如何? 注意:不是在讨论IDE,也不是在讨论.net的跨平台!而是VS支持c++跨平台的特性.既然要跨平台,对于与系统

我所理解cocos2d-x 3.6 lua --使用Cocos Studio

Cocos是触控科技推出的游戏开发一站式解决方案,包含了从新建立项.游戏制作.到打包上线的全套流程. 开发者可以通过cocos快速生成代码.编辑资源和动画,最终输出适合于多个平台的游戏产品. Cocos的主要产品有Cocos Studio.Cocos2d-x(Cocos Framework).Cocos Code IDE. Cocos Studio:是Cocos2d-x引擎配套的跨平台游戏开发工具,帮助开发者快速构建游戏场景.编辑UI.编辑动画等游戏资源,支持第三方的资源导入.支持多种类型游戏的