cocos android分析(2)

来源:未知 责任编辑:责任编辑 发表时间:2015-01-01 13:14 点击:



$(call import-module,):通过NDK_MODULE_PATH环境变量引用的模块的目录列表,并且将其自动包含到Android.mk中


这样,一个编译环境的include,library,target基本指定,则编译出最终的目标文件,和makefile思路上没什么区别,另外这里需要编译出cocos2dx.a,静态库,是通过cocos2d文件夹中的make编译而成,这个脚本则要复杂一些,不过思想并无不同。更多NDK Make可以参考:《Android Make》


JNI交互
C++接口封装完毕后,我们就开始看一下Java代码,了解一下最终实现的流程和效果,Java代码如下:





Java层的框架也很简单,这里并没有多Accelerometer和Music、Sound等进行分析,只是对涉及到显示相关的进行分析。Java层面流程如下:





如上,如果熟悉Android界面开发,可以从基类了解到Java层面是通过Activity、GLSuffaceView来进行的显示。这里不详细介绍,如果有兴趣,可以看一下《剖析游戏开发用view还是surfaceView》,View类似传统的二维静态界面,数据驱动显示,而SurfaceView则类似三维机制,实时渲染。因为Cocos2d是OpenGL的,这也好解释。


对于整个框架其实要说的也很多,不过我对Java还不太了解,所以有些东西看的不一定透,也难免有一些问题。


Renderer
Renderer类负责每一帧的渲染驱动,调用步骤如图里面的1和2,在2中调用jni里面的nativeRender实现一帧的渲染,而GLSurfaceView则负责UI交互的监听。


这种机制的好处是在Java中Renderer渲染器是独立线程调用,因此和UI之间没有交互性,这样既保证了用户体验(用户的事件通过GLSurfaceView监听,最终通过Renderer传递至C++层面来响应),也保证了渲染过程的抗干扰,依旧通过C++层面进行渲染。,整个显示过程用到的jni封装主要如下:

 private static native void nativeTouchesBegin(int id, float x, float y);

 private static native void nativeTouchesEnd(int id, float x, float y);

private static native void nativeTouchesMove(int[] id, float[] x, float[] y);

private static native void nativeTouchesCancel(int[] id, float[] x, float[] y);

private static native boolean nativeKeyDown(int keyCode);

private static native void nativeRender();

private static native void nativeInit(int w, int h);

private static native void nativeOnPause();

private static native void nativeOnResume();




jni封装
jni的封装主要有两部分,一个是cocos2d自己的JNI封装,这部分封装主要是为了在Java中调用cocos2d的jni接口,一个是HelloWorld中自己的jni接口封装。这一块本来是我比较感兴趣的地方,因为jni封装还是挺繁琐的一件事情,最后发现cocos2d在本质上也没有什么区别,麻烦的还是得封装。第二点,cocos2d主要是游戏引擎,所以基本所有功能都是由C++层面来实现,一帧的渲染,事件的处理,而Java层主要负责逻辑处理,最终通过jni调用C++接口来实现。第三点来说,cocos2d本身封装的还是很简洁的,这点我觉得做的还是很优雅的,在设计这块,是以Java的逻辑为依据来进行划分,我觉得这个很可取,虽然cocos2d是C++做起来的,但是并没有为了保证各个平台的一致性而强迫接口的一致,而是在jni层按照SDK在具体平台的应用特点来进行封装,这样减低了实现难度,提高了代码的易用度,牺牲就是应用平台接口的局部不一致性。jni层面主要是事件传递和窗口渲染部分的接口封装,针对游戏开发者而言,最核心的部分都可以在Windows平台下完成,然后在Android部分完成特有事件的传递,渲染部分直接采用cocos2d给出的标准范例实现即可,大大简化了开发者自己封装jni的工作。
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • cocos2d-x学习笔记(19)--label 、label atlas
  • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
  • Cocos2d-x学习(一):HelloWorld
  • cocos2dx在xcode下开发,编译到android上(2)
  • cocos2d 设置屏幕默认方向
  • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
  • Cocos2d-x 2.0 之 Actions “三板斧” 之一
  • cocos2d-x学习笔记(18)--游戏打包(windows平台)
  • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1