欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

android游戏super jumper

程序员文章站 2022-07-15 11:24:24
...
至今对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!