注:网上一个竖版射击游戏画面,借来用用
1 没有很多时间排错润色,将就一下
2 非从事游戏开发,水平有限,不求闪光,但求无错。
3 权当笔记,理清思路
一 主要类介绍
1 ModelMIDlet.java :程序入口
2 ModelCanvas.java :画布类,最主要的类,整个游戏状态流程,画面都在此类里
3 MyShip.java :自己的灰机
4 MyMissile.java :自己灰机发出的子弹
5 UFO.java :敌机
6 UfoMissile.java :敌机发出的子弹
7 Sprite.java :精灵类,上面的灰机子弹都是继承自这个类
二 稍微详细点的流程
此类游戏基本的流程就是执行MIDlet开始游戏,然后New一个Canvas画布对象,负责显示,开一个线程,里面是一个基于状态机的大循环。循环的时候处理按键,简单的逻辑判断后将结果画在屏幕上,再循环。
1) 程序以ModelMIDlet.java的 StartApp()为入口方法,New一个Canvas对象,调用Canvas的开始方法。
2) ModelCanvas类因为要处理按键,所以实现CommandListener接口,因为要使用线程所以实现Runnable 接口。
主要方法:
game_init()初始化
start()方法,由MIDlet调用启动线程。
public void commandAction(Command c, Displayable d) 里面处理按键信息,按了左键就让MyShip向左走走,
protected final void paint(Graphics g) Canvas的需要重写的方法,里面根据状态的判断来画图贴图,如游戏未开始,就贴个logo图,游戏进行中,就把那些小飞机子弹什么的画出来。
public final void run() 线程启动后调用,和paint方法一样,也是根据状态来处理,不同的是run里面主要是逻辑处理。 比如遍历下UFO的实例数组,哪个UFO还活着就移动下位置,或发个子弹,遍历子弹数组,哪个子弹超出屏幕了,就把它灭掉。所有逻辑处理完后,调用repaint();下让屏幕更新下。
3)Sprite.java 是所有画面活动的东西的基类。里面有一些比较固定的属性方法。
如:位置,是否被击中,是否是活的,doMove移动自己的方法,doDraw画出自己的方法,供画布类的paint方法调用。其中有个比较特别的方法,boolean isOverlaps(Sprite otherSprite),是否和其他sprite碰撞,在run的逻辑判断时使用的。还有些get set 方法,
三 粗略的流程
启动程序后,MIDlet的startApp()方法被调用,然后new一个canvas,并调用其开始方法。
canvas的开始方法里进行初始化,此时状态为初始化等待开始,此时显示LOGO,
按键也一直被监听者。按键后开始游戏,此时状态为游戏中。然后启动进程的主循环,
主循环里进行一些逻辑判断和操作,如子弹移动,主角飞机是否中弹,一个循环后,刷新屏幕。
主循环过程监听着按键,移动或射击。
主循环逻辑判断时若中弹之生命结束,状态为失败结束,绘制结束画面,若消灭敌机,状态为胜利结束,绘制胜利画面。
一坨乱糟糟的文字,思路不是很清晰,将就下。
要展开写太复杂了,大体就这么个流程。