RPG(角色扮演游戏)是手机游戏中的一类主要类型,也是相对来说比较麻烦的一类游戏,下面通过一系列的文章来介绍如何使用J2ME技术来开发RPG游戏。
首先让我们来看一下游戏的骨架——程序框架的实现。程序框架主要包含三个方面:绘制结构、事件处理结构以及线程结构。在整个框架中,采用当前游戏编程中的通用的状态控制机制,为每个界面,如菜单、帮助、游戏对话、商店界面设置一个唯一的状态值,使用该状态值控制界面的绘制、事件的处理以及线程处理。
在程序的实现上为了通用,以MIDP1.0为基础来进行制作,这个要比使用MIDP2.0的Game API实现起来要复杂一些。
在类结构的划分上,为了节约减小jar文件大小,把这个程序代码划分为两个类,一个MIDlet类,一个界面类,所有逻辑代码以及线程实现均放置在界面类中。
下面是MIDlet类的代码,主要实现显示界面、处理手机来电、释放资源以及退出功能,线程启动放在界面类中实现。源代码如下:
package myrpg; import javax.microedition.midlet.*;
import javax.microedition.lcdui.*; /** * RPG结构的MIDlet类
* 包含如下功能:
* 1、显示界面
* 2、手机来电处理
* 3、释放资源
* 4、退出方法 */ public class MyRPGMIDlet extends MIDlet {
/**MyRPGMIDlet对象,用于实现退出功能*/
static MyRPGMIDlet instance;
/**界面类对象*/
MyRPGCanvas mainScreen = new MyRPGCanvas();
public MyRPGMIDlet() {
//初始化
instance = this;
//显示界面 Display.getDisplay(this).setCurrent(mainScreen);
} public void startApp() {
//开始或继续游戏
if (mainScreen != null) {
mainScreen.startGame();
}
} public void pauseApp() {
//暂停游戏
if (mainScreen != null) {
mainScreen.pauseGame();
}
} public void destroyApp(boolean unconditional) {
//释放资源
if (mainScreen != null) {
mainScreen.destroyGame();
mainScreen = null;
}
} /**
* 退出方法
*/ public static void quitApp() {
instance.destroyApp(true);
instance.notifyDestroyed();
instance = null;
}
}
|
游戏逻辑和界面绘制以及控制都放在一个类MyRPGCanvas中,这样实现没有使用面向对象容易修改和扩展,但是通过结构化代码,还是可以保证较高的可读性以及维护性。在MyRPGCanvas中,通过状态变量status控制界面的绘制以及线程逻辑,为了清晰,把每个处理逻辑都封装成一个方法,如果方法比较复杂还可以继续拆分为多个方法。
关于绘制部分,如果每个界面都具有一张不透明的背景图片的话,可以省略清屏功能,这样可以提高程序的执行效率。
关于线程部分主要实现了暂停控制,通过isPaused变量来控制逻辑是否执行,从而实现暂停功能,并实现精确的延时。
关于资源加载和销毁,如果机器的内存不是很紧张的话,可以一次加载,如果内存比较紧张的话,需要编写专门的代码控制资源的加载和销毁。
(编辑:aniston)
|