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

在前文曾经写过Java坦克大战游戏设计,但是后来由于没有时间,就没写完,最近,计划将地图开发包移植到Android平台。因此需要对Android平台进行学习,在看过Android开发指南后,对Android平台有了一些了解,但是还是无实战经验,学习一个平台最好的办法是通过一个项目,也就是通过编程来学习一个新的移动开发平台。因此想起几年前在Java ME平台上写的坦克大战游戏,这个一个既有趣以能充分了解一个新平台的项目。而且通过两个平台的比较,也就更好的理解Android平台开发的一些特点。
下图是Java ME平台下坦克大战的界面效果图

在移植到过程中,发现尽管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平台,这里先给出一个移植后的截图。后面将详细说明这个游戏的设计,最后会给出所有源码,有兴趣的朋友可以扩展成联网游戏或是作为学习游戏设计的参考,坦克大战游戏是一个中等难度的游戏,对于有志从事手机游戏开发的朋友,可以自行写个坦克大战游戏后基本就能入门手机软件开发。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值