至今对android的学习有一个多月了,但是目前也没做过什么android项目,研究普通的表单组件又没多大意思,所以就尝试去学学游戏开发。
由于本人以前并没有从事过这方面的开发,所以根本就不知道从哪里开始,于是本人就试着找找已经开发好的开源游戏。起初,从android自带的sample中找到了个snake游戏,那个游戏写得比较精简,相对来说,还算是个不错的入门。
但是看了snake源码后,发现自己在这方面欠缺的知识还是太多,所以想找本游戏开发的书看看,但是在网上找了下,要么就是些很过时的书,要么就是中文版且很厚的书,总之没找到满意的。在没有办法的时候,只得尝试去找找英文版的书了,还好,找到本叫《beginning android game》的书,这本书总体来说,还讲得不错。自己大概开了一大半,作者从实践出发,一步一步的实现了几个确实可用的游戏。
第一个游戏与snake类似,只不过介绍了作者自己搭建的一个游戏引擎,主要原理就是通过canvas不停的将图形画出来,相对来说不是太复杂,可能理解此游戏引擎稍微要麻烦点。
第二个游戏介绍的是一个叫super jumper的游戏,这个游戏有点类似于超级玛丽,这才是本人找到的一个看起来还算不错,确实有些实用价值的游戏。因此写这篇博客的目的主要是因为它。因为这个游戏相对来说有点复杂,基本上算得上整个这本书的核心内容了。当然本人还有一个目的是,由于本人并不是从事android开发的,所以恐怕过段时间就忘记了,所以在此算是留下点回忆吧。
由于这个jumper也是用到了作者本人构建的游戏引擎,所以首先得熟悉此游戏引擎,然后才能考虑游戏逻辑方面的东西。而此书的作者正好是gdxlib游戏引擎的,而本人先前也正好看过一点关于libgdx方面的东西。所以有些概念还算熟悉。
但是这个游戏功能虽然不是很强大,但对于刚入门的人来说,涉及的到的知识点还是相当的多,在此挑些个人认为比较难的地方讲一下。
1.GLGame类,这个类是整个游戏的最重要的类之一,实现了Activity、Renderer类,关键是实现了Renderer接口,这个接口是OpenGL的核心之一,Opengl的画图方式一般是一个类实现Renderer接口,然后通过GLSurfaceView渲染,大体代码如下:
。。。。
glView = new GLSurfaceView(this);
glView.setRenderer(this);
setContentView(glView);
。。。。
Renderer有三个方法,而onDrawFrame是实现动画的核心,此方法会不停的更新游戏画面。
2.AccelerometerSimulatorHandler重力加速计模拟类,这个类本身并不复杂,但模拟重力加速计的功能实现起来有些麻烦,具体步骤在本人的上一篇文章已经讲得很清楚了。
3.MVC模式,这个游戏将游戏逻辑与游戏界面分开开发,我觉得这方面作者做得很好,要将游戏逻辑与界面分开是需要相当强的功底的。而该书的作者却做得很好,界面更新使用present方法,而游戏逻辑则使用update实现更新。在遇到比较复杂的界面与逻辑时,如World类,则把界面更新放到单独的一个类WorldRenderer中。这种分布初开会觉得不好理解,但一旦理解过来,维护起来就相当的轻松了。
还有些值得一提的是,作者对每个游戏角色的区分也做得比较好,比如Bob,Castle,Coin等,每个与此概念相关的代码都在本类里面,业务逻辑封装得很好。
4.关于游戏引擎。作者搭建的游戏引擎虽然不比libgdx,但是开发小游戏还是够了,其中几个比较重要的概念需要讲下。
SpriteBatcher类,这个类是此引擎的核心,主要作用是画图,有点类似批处理的概念,即通过begin开始,直到end时才开始画,这样一性画图可以提升系统性能。但SpriteBatcher里面有些概念还是不好理解,这也是整个opengl必须要理解的部分,那就是Vertices顶点类,而顶点Vertices一般又包括三个部分,顶点坐标、顶点索引、顶点颜色。具体的用法可见Vertices类,此类主要是将opengl es的类稍微封装了下。
Texture类,这个类也有点复杂,主要作用是从asset中加载一张位图并通过此位图创建一个纹理类,然后对图片进行一些过滤与压缩。
Pool类,这个类也算是个比较有意思,主要是对一些经常创建的对象(如侦听器)才池的方式缓存起来,在web开发中比较常见,但在手机上实现类也可以达到这个目的。
Camera2D类,这个类主要是设置不同的场景,本人对这个东西也不是很明白,大体是要操作某个对象显示,先得设置其场景,而且根据不同的场景模式,会有不同的操作,比如设置矩阵模式为GL_PROJECTION,则下面的代码将会是对GL_PROJECTION的系统操作。而如果设置成GL_MODELVIEW,则是对Mode的相关操作。
总结,jumper基本上包括了初级游戏开发所包含的所有知识,而且是基于opengl es开发,而且架构设计也比较清晰,性能优化方面做得也不错,如果把这个游戏的所有知识都掌握了,基本上开发一个小游戏是没有问题了。
由于本人也只是花了两周时间看了个大概,有些代码做了些注释,具体也不算完成熟悉,在此做个纪念,以此证明本人确实学过android!
分享到:
相关推荐
android 游戏源码
第9章 super jumper:一个2dopengl es游戏 9.1 核心游戏机制 9.2 背景故事和艺术风格 9.3 画面和切换 9.4 定义游戏世界 9.5 创建资源 9.5.1 ui元素 9.5.2 使用点阵字体处理文本 9.5.3 游戏元素 ...
jumper 小游戏 脑与手的训练 挑战反应力极限 非常非常好玩
android游戏编程入门 《Android4游戏编程入门经典》是2012年清华大学出版社出版的图书,作者是(美)策希纳(Zechner,M.),无(美)格林(Green,R.)。 第1章 Android,后起之秀 1 1.1 Android简介 1 1.2 版本分裂 3 ...
Nom Invades Android * OpenGL ES: A Gentle Introduction *2D Game Programming Tricks * Super Jumper: A 2D OpenGL ES Game * OpenGL ES: Going 3D *3D Programming Tricks * Droid Invaders: the Grand Finale ...
Libgdx开源项目,包括桌面版与Android版
Jumper, 快速轻量级易用的网格游戏路径库 跳线 跳线是为基于网格的游戏设计的路径库。 它的目标是以英镑为代价,以英镑为代价的轻量级 。 它具有广泛的搜索算法,内置了简洁的界面,链接功能使它非常友好,易于使用...
Jumper:一个远程服务执行PHP库
jumper 5gt适用说明书,第一章,第一节 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Altium Designer 增加 Jumper 跳线的正确说明,看完这个就懂了,很多论坛的教程都是片面的。
2d 垂直跳跃游戏套件3.0 2D Endless Jumper Game Kit 3.0Unity游戏源码精品源码是Unitypackage包 , 新建空项目直接导入到项目里面就可以运行了,无需其他操作,适合二次开发和学习使用,都是经典游戏,需要其他游戏源码...
使用html+css+js实现的一个小游戏,没有采用三维技术,仅仅是使用基本的平面几何实现了假三维的效果。可玩性还不错
对于一个整数序列 Arr[n] (n>1), 如果序列中相邻元素之差的绝对值能够取遍1到n-1的所有整数,那么这个序列就可以叫做 Jolly Jumper序列。请实现一个函数,判断输入的序列是否是Jolly Jumper序列。
紧接上一款fofa爬虫,这一款Jumper_Waf2.0做了重大更新,主要是界面优化,和添加了目录扫描功能,可以直接在子域名扫描模块搜索到的url_txt直接用于目录扫描模块的批量化处理功能,其次,在目录扫描模块,继承了前面...
Unity Twist The Ball - Platform Jumper 1.1.4_小球踩方块小游戏,链接:https://pan.baidu.com/s/1x15h5ueO6POqvVu5gtxL9g,购买之前请先确认链接可用,文件里是链接密码。资源仅供大家学习交流,下载的文件很小,...
通过修改本机指向的dns,提高浏览网页打开的速度。
文中附上下载地址,官方文档操作地址,以及本人亲自实操的过程!
一个用 Python 编写的带有解谜元素的跳跃和运行游戏。 指示 除了 Python 3 之外,还必须手动安装以下库。 不幸的是,目前无法使用 pip 自动执行此操作。 在 Windows 上,您可以使用 Christoph Gohlke 的安装程序。 ...
027 The Jumper.doc