`

android游戏super jumper

阅读更多
至今对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!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics