离线下载
PDF版 ePub版

引路蜂 · 更新于 2018-11-28 11:00:43

Android 坦克大战游戏设计解析一

几年前在 Java ME 平台上写的坦克大战游戏,这个一个既有趣以能充分了解一个新平台的项目。而且通过两个平台的比较,也就更好的理解 Android 平台开发的一些特点。 下图是 Java ME 平台下坦克大战的界面效果图

pic

在移植到过程中,发现尽管 Android,和 Java ME 都是以 Java 为开发语言的手机平台,两都之间的差异还是不少的,但好处是,两者都采用 Java 语言,相当一部分与平台无关(如除图形,网络之类)的代码是可以通用的,这大大减少了从 Java ME 到 Android 平台移植的工作量。

这里先给出一些移植过程中的总结,后续文章将较详细的说明坦克大战游戏的设计过程(适用于各个平台)。

  1. Android 应用一般无主程序入口,但对于单 Activity 的应用来说,Activity 相当于 Java ME 的 Midlet。
  2. Android 中 View 的概念类同于其它平台中 Control 的,ViewGroup 相当于 Container. 当然它也可以用作一个窗口 View,在移植的过程中,采用单 Activity,多窗口 View 的方法来对应于 Java ME 的 Midlet 和多个 Displayable 类。
  3. Android 绘制图形时,没有一般图形库中提供的 Pen, Brush 类,设置 Pen 和 Brush,字体都是通过 Paint 类来设置的,对于初学者一开始会觉得有些困惑。
  4. Rect 一般是通过 left,top, bottom, right 来定义,而 Java ME 平台是通过 left, top, width, height,如果不注意,会造成意想不对结果:-),如 android 平台中 canavs.drawRect, 以及 canvas.clipRect 是通过 left,top, bottom, right 来定义一个四边形,而 Java ME 是通过 left,top 及宽度,高度来定义,移植过程如果不注意就出错了。
  5. Android 在非 UI 线程中更新 Canvas 里,需要调用 postInvalidate, view.invalidate 相当于 Jave ME 中 Canvas 的 repaint。如果想在非 UI 线程执行和 UI 相关的方法,一般是通 hander.post 来实现,而与这对应的 Java ME 是 display 的 callSerially.
  6. Android 中提供一个 SurfaceView 类,允许在使用另一个 thread 来更新 Canvas,这对于游戏的图形的刷新性能提高非常重要。
  7. Android 没有提供类似 Java ME 中的 Game API,但是实现或是移植一个类似的 Game API 也不困难,Android 坦克大战游戏中移植了 Java ME Game API 中 Layer, LayerManager,TiledLayer,Sprite 类,使得整个移植工作变得非常顺利。

总体感觉 Android 平台相对来说还是比较容易上手,对于会 Java 或是 C# 的程序员,即使以前没有从事过手机软件开发,也是比较容易入门的。而且 Android 平台和 Java SE 有相当一部分类是公用的,也是二进制兼容的,也就是说在 Java SE 平台上的类库(.jar)文件,可以直接用在 Anroid 平台,这里先给出一个移植后的截图。后面将详细说明这个游戏的设计,最后会给出所有源码,有兴趣的朋友可以扩展成联网游戏或是作为学习游戏设计的参考,坦克大战游戏是一个中等难度的游戏,对于有志从事手机游戏开发的朋友,可以自行写个坦克大战游戏后基本就能入门手机软件开发。

pic

上一篇: 关于 下一篇: Android坦克大战...