基础部分:
1.Java和C:除了基本的东西,泛型,接口什么的,java语法这一块还要对工厂模式,并发,代理模式这些东西非常熟练,另外最好了解一点VM的工作机制,还有非常重要的一点,最好把VM的GC机制也有个大概的了解,如何回收强引用,软引用,弱引用等等。如果你现在还是新手,建议你把Java了解透彻再往下看,很多朋友经常来问我问题,都是一些很基础的Java没有过关,所以大家还是不要忽略基础比较好。至于C,如果你是做应用,C可以不懂,如果你是做游戏你不懂C也不想学,那么你还是去做应用吧。
2.JNI:个人认为这个还是必学的,虽然可能你学了一趟下来感觉这些东西你平时用不到,但是如果你做的是游戏开发,其中的一些原理可以在后面的开发中少走不少弯路。现在为了提高游戏的运行效率和速度,大部分底层的音频图片加载,碰撞检测等等等等函数都是用JNI来写的,换句话说就是用C来写的,然后通过JNI把运行结果返回给java。如果你满足用java写一些小游戏,内存管理甚至是运行速度都不是游戏的瓶颈,那么JNI也许你平时感觉不到它的用处。但如果不是这样,那么JNI可以帮助你提高游戏的效率甚至帮助你找到错误。举个简单的例子,很多游戏在开发的过程中经常会OOM(内存溢出),用Java的朋友们很难想象这一点,因为我们潜意识中就认为java的回收机制会帮助我们GC,但是有一点被我们忽略的,在很多游戏引擎中,资源文件(音频视频图片)的加载采用的是C的本地代码,而C是没有类似的回收机制的,因此我们还需要手动去将这块资源回收,因此对JNI有一些了解还是非常有好处的。
3.其他语言:很多人可能一直认为android程序只能用java来写,其实不是这样的。相反,我不夸张地说市面上的商用软件特别是游戏一般都不是用Java或者仅仅用Java来写的。Java有很多瓶颈,也不易于跨平台的移植。大家常常玩的很多IOS移植过来的大游戏比如什么都市赛车6之类的,一般都是用Unity3D这个商用的可视化引擎来编写的,而其中用到的语言则是C#和JavaScript。我们用的新浪微博等等每个平台都必须要有的软件,他们是用JAVA写的吗?应该也不是。一般我们选择用PhoneGap这个跨平台框架来编写,而它则是Html,Css,JavaScript配合来编写的。而游戏开发中的一些游戏引擎,很多是Java,有时候也需要用其他语言来编写脚本等等,因此如果你要开发游戏,至少你不能认为游戏只能用Java来编写。
入门
1.Android SDK:你必须明白你即将要将游戏移植上去的这个平台是怎么工作的。虽然我们大部分游戏都是用游戏引擎或者框架编写的,但他们的主干依然是Activity,不然他们怎么能在Android平台上运行呢?想学游戏开发的朋友们最好先把SDK搞的透彻一些,SDK控件部分倒也不必过于纠结,每一个游戏引擎都有自己的控件,你也可以根据引擎提供的控件接口自己实现效果更好的控件。SDK的控件在游戏引擎写的游戏中可是显示不出来的哦,呵呵。如果你是Android的初学者,建议你先把SDK学得透彻一些,独立编写一两个用SDK来编写的应用,然后再开始学习游戏的开发。
2.OpenGL:就像很多没有学习过面向对象语言的人一样好奇那些按钮是怎么显示出来并且能响应触摸事件一样,没有学过OpenGL是没有办法理解游戏中的图形渲染的机制的。还有贴图纹理AABB碰撞检测模式等等等等。如果你不想学OpenGL,那么我劝你还是去做应用吧。
进阶
1.游戏引擎:如果你要做游戏,建议选定一个合适你自己的引擎来编写游戏。首先我要解释一下引擎是个什么东西。其实就是另外一个非常类似于SDK的东西,它有一成套的可以在游戏开发中使用的函数,它也和SDK一样有自己的API文档,甚至我们可能从头到位都不用SDK中的一点点代码仅用游戏引擎中给我们提供的方法就可以写出一个游戏。因此,游戏引擎其实就是一个看不见摸不着的东西,不要指望游戏引擎是可视化的,它就是一个函数库,专门用来开发游戏的函数库,仅此而已。关于游戏引擎的选择,其实很多游戏引擎各有各的优点,有的引擎适合开发3D游戏,有的适合2D的,有的适合开发RPG,有的适合开发AVG,有的效率高,有的跨平台。当然个人建议还是选用一个跨平台的引擎,便于以后的移植。当然如果是在游戏公司里,一般都有自己的引擎,那就另算了。
2.其它:最好还是有一点基础的物理知识,不然我劝你还是去做应用吧。另外你必须懂的一些计算机底层的知识,有关内存管理的问题等等,看起来没什么用,但在游戏这种对内存管理要求极其严格的程序里面这一点也不过分。如果你急于上手,那么相信不用我劝你,你自己看着满屏幕的内存溢出你自己也会打退堂鼓了。
高手:
这个我也不知道,因为真正的高手一般人都见不着。我自己离这个级别还差的不知道有多远,因此这一部分还是等待真正的高手们来写吧。