通过游戏代码学J2ME(一)
通过一款游戏的代码分析,从中学习掌握MIDP的开发知识。
以一个简单的射击类游戏为说明,代码中较多的涉及控制操作,显示操作的内容。
这个游戏由7个类组成,其中可以分为
主类 : planemain.java
游戏动作类: cortrol.java
游戏属性类: plane.java bullet.java
游戏辅助类:about.java cover.java backdrop.java
首先来介绍主类的代码
planemain.java
package npc7776; // 包名
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;//引入相关的J2ME包
/*********************************************
* 类功能介绍:主要屏幕用于控制现实启动封面及启动游戏
*********************************************/
public class planemain
extends MIDlet
implements CommandListener { // 注释一
private Display display = null;
private List mainList = null;
private Command cmdQuit, cmdOk;//注释二
public planemain() {
String option[] = {
"继续", "新开一局", "最高分", "帮助", "关于"};
mainList = new List("选项", List.IMPLICIT, option, null);
display = Display.getDisplay(this);
cmdQuit = new Command("退出", Command.EXIT, 1);
cmdOk = new Command("选择", Command.OK, 2);
mainList.addCommand(CmdQuit);
mainList.addCommand(CmdOk);
mainList.setCommandListener(this);
} //注释三
public void startApp() {
display.setCurrent(new cover(this)); //注释四
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
mainList = null;
display = null;
}
/*************************************************
* 功能介绍: 返回到主界面
* 输入参数:
* 返回参数:
*************************************************/
public void goBack() {
display.setCurrent(mainList); // 显示主屏幕
} //注释五
public void commandAction(Command c, Displayable d) {//注释六
if (c == cmdOk) {
tch (mainList.getSelectedIndex()) {
case 0:
break;
case 1:
display.setCurrent(new cortrol(this));
break;
case 2:
break;
case 3:
break;
case 4:
display.setCurrent(new about(this));
break;
}
}
if (c == cmdQuit) {
destroyApp(true);
notifyDestroyed();
}
} //注释 七
}
注释:
一 . 通过代码:public class planemain extends MIDlet implements CommandListener 定义一个名为 planemain 的类,这个类通过MIDlet
派生,MIDlet 是一个虚类,从这个类派生时需要重载startApp,pauseApp,destroyApp 这3个方法,他们是在MIDlet状态发生改变时会被调用。
1.当程序第一次运行或是恢复运行时,startApp方法会被调用。
2.当程序暂停执行时,pasuseApp方法会被调用。
3.当程序退出时,destroyApp方法会被调用。
同时planemain 类实现了CommandListener接口,实现这个接口是为了让 planemain 对象能够处理来自窗口的菜单命令。
二 .private Display display = null; private List mainList = null; private Command cmdQuit, cmdOk;这里我们定义了显示类,List
类和俩个事件按钮。
三 .public planemain(){} 在构造方法中,定义了List加载的内容,设定当前窗体,并定义监听事件。mainList.addCommand(CmdQuit) 的作用
是把命令添加到mainList中去,然后调用mainList.setCommandListener(this)将命令监听器设置在planemain对象上。
四 . 显示封面俩秒。startApp 这里我们在窗体开始后,设定窗体显示。注意我们将当前设定赋予cover类。在cover类中我们只现实封面特定
的时间(cover类将在后面写到).
五 .goBack类由cover类调用,在封面结束后,显示本页内容. 这里只做理解,等以后写到cover 类就会明白.
六 .commandAction 方法是CommandListener 接口所要求实现的方法,用于菜单命令处理.
七 .整个commandAction方法主要是监听控制按钮动作.在选取项目后点击确认分别作不同的处理.当选取继续时可以向其他页调用转回,选取新
开游戏时将当前页面交给cortrol类.当选择关于时,将当前页面控制权交给about类.最后当我们点下的是退出按钮时,则退出当前游戏,此时程序
将会调用destroyApp()方法.mainList.getSelectedIndex()意思是得到被选中的选项的位置索引.
注意 : 如果把上段代码写入JB 会出现一些红线.因为一些类还没有写,主要是理解程序,cover,about,cortrol类将在近期写出.