J2ME手机游戏引擎程序架构

在游戏开发以及任何软件的设计都需要建立一个稳定的引擎结构体,来作为软件设计的基本架构,是软件体系结构的核心支撑框架,一切功能的实现以及扩展都在这个基础架构之上来完成。一个游戏的设计涉及到游戏控制、角色、游戏场景、道具、游戏声效以及游戏过程事件监听机制等元素,因此建立良好的游戏引擎能对以上各元素进行有效的控制。本文介绍在J2ME游戏设计中游戏引擎的基本程序架构。

游戏引擎可以建立不同的结构体来实现,但是任何游戏的设计都离不开通过设计一个主循环loop来重复控制整个游戏过程,当然整个游戏的核心结构(背景幻化控制、精灵坐标变化、动作帧画面变化等)都包含在该循环中。在J2ME游戏设计中,程序架构一般需要建立两个核心类,即是MIDlet跟Displayable两类。

1、其中MIDlet是J2ME的主类,任何程序主类都需要继承MIDlet来控制整个游戏的生命周期,需要覆盖MIDlet中的三个周期方法startApp、pauseApp跟destoryApp,分别为执行开始、暂停、结束等动作的操作体。

public classGameTest extends MIDlet implements CommandListener{
/**
 * 游戏引擎介绍
 */
private Command exitCommand;
private GameCanvasTest gameCanvas;
public GameTest () {
 exitCommand=new Command(" exit?,command.exit,1);
 GameCanvasTest gameCanvas=new GameCanvasTest (this);
 sfcan.addCommand(exitCommand);
 sfcan.setCommandListener(this);
 Display.getDisplay(this).setCurrent(gameCanvas);
 // TODO 自动生成构造函数存根
}
protected void startApp() throws MIDletStateChangeException {
 // TODO 自动生成方法存根
 //gameCanvas.thread.start();
}
protected void pauseApp() {
 // TODO 自动生成方法存根
 try{
 gameCanvas.thread.wait();
 }catch(Exception e){}
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
 // TODO 自动生成方法存根
 gameCanvas=null;
}
public void commandAction(Command c,Displayable d){
 if(c==exitCommand){ 
 notifyDestroyed();
 }
}
//实现游戏过程界面跟不同操作变化的调度
public void changeTale(int taleIndex)
{
 具体代码实现.......
 Display.getDisplay(this).setCurrent(....);
}
}

GameTest类继承了MIDlet类,实现游戏生命周期的控制,而且也仅仅对游戏生命周期的控制跟游戏过程中的UI调度工作,而把具体的游戏核心模块放到GameCanvasTest类中去实现。

2、Displayable是游戏的显示效果核心,在J2ME游戏设计中使用GameCanvas类完成游戏画布工作,设计类继承GameCanvas来实现游戏核心模块,通常将游戏主循环放置于该类中实现整个游戏的控制,因此在继承GameCanvas的同时还需要实现循环Runnable接口。
 public class GameCanvasTest extends GameCanvas implements Runnable {
   //声明变量.......
 public GameCanvasTest(MIDlet midlet)
 {
   super(true);
   //初始化变量.......
 }
  public void run(){
   keyPressed(getKeyStates());
   spritePixel();
   drawCanvas();
   //其他方法以及处理.......
  }
  protected void keyPressed(int keyCode){
  //按键处理.......
}
 public void spritePixel(){
 //精灵以及地图坐标变幻控制......
}
 public void drawCanvas(){
 //根据坐标变化重绘画面处理........
}
}
 GameCanvasTest类中完成了游戏主干部分,包括键盘按键事件处理、坐标变化、画面重绘,当然游戏精灵跟地图背景也在该类中定义,并使用LayerManager进行管理。

以上是一般的游戏架构,当然,在较复杂的游戏设计里面,使用以上架构将会较麻烦,使得程序不清晰。因此在程序设计中可以采用MVC模式来构建游戏引擎,将各部分抽象出来不同的层(分别为UI显示、线程控制以及输入监控等调度、精灵等游戏具体模型)去完成各自的功能,从而提高软件的可读性跟可维护性。

时间: 2024-11-02 21:07:10

J2ME手机游戏引擎程序架构的相关文章

J2ME手机游戏引擎程序结构简述

游戏引擎的结构很多,不过基本上都是在一个游戏主循环内实现.程序里面的主循环包含了程序框架的最主要的结构体.J2ME的程序一般都包含两个class文件,一个是MIDlet,一个是Displayable.一般我都是把游戏的主要代码放在Displayable这个类里面.这个类是基于事件驱动的程序,有三个主要相应函数void paint(Graphics g),void keyPressed(int keyCode),void keyReleased(int keyCode). 1.使用Runnable

J2ME手机游戏开发日记1

J2ME新手,做了一个游戏的项目,其中有些体会,觉得有些东西还是可以拿出来和大家分享.说错了还请包涵. 开发环境: windows2000+JBuilder X+semc_j2me_sdk_2_1_4_beta 从来没有接触过这个方面,因为小组一个项目要开始学J2ME,看了两天的书,发现其实JDK还是很简单的.总共也就那几个类.只是如果要考虑到资源和性能的最佳优化的话,算法和数据结构的要求比较高. 先说环境的搭建:1.windows2000(这个不用说了)2.JBuilder X(其他版本的JB

3D手机游戏引擎Project Anarchy免费下载使用

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   免费3D手机游戏引擎Project Anarchy今日发布beta版,可以下载使用.Havok是英特尔的一家子公司,专注于中间件的开发,今天在GDC上透露其正在开发一个点对点的3D手机游戏引擎,这个引擎完全免费,今日已经发布beta版,可以下载使用. Anarchy Project是一个跨平台的引擎和工具包,是为手机游戏开发商量身打造的,Havok承诺此软件下载

私卖公司游戏引擎程序获利10万被判刑

本报讯(高新法检 记者牛莉)一名侵犯著作权获利10万元的技术员,日前被成都高新法院判刑并处罚金. 23 岁的刘某曾担任成都某信息技术公司的技术员,私自复制了该公司拥有著作权的一个游戏引擎程序及两款网络游戏软件,并将其存放于自己的笔记本电脑.公司曾专门叮嘱他,涉及到公司 版权的软件.程序等一定不要在外传播.转卖.刘某辞职后,没有将存放在电脑中的程序.游戏软件等自行删除,还将其复制成光碟后挂在网上公开出售,将该引擎程序以10万元的价格卖给了高某. 法院审理认为,刘某以营利为目的,未经著作权人许可,复

j2me游戏引擎程序结构

程序 游戏引擎的结构很多,不过基本上都是在一个游戏主循环内实现.程序里面的主循环包含了程序框架的最主要的结构体.J2me的程序一般都包含两个class文件,一个是MIDlet,一个是Displayable.一般我都是把游戏的主要代码放在Displayable这个类里面.这个类是基于事件驱动的程序,有三个主要相应函数void paint(Graphics g),void keyPressed(int keyCode),void keyReleased(int keyCode). 1. 使用Runn

Eclipse中开发J2ME手机游戏

问题描述 从网上下载了J2ME的手机游戏源码,是一个文件夹THUNDER.该文件夹中有两个文件夹,分别为:BOLT(源代码)和ICONS(图片资源).请问:在Eclipse中怎么样部署这个程序?怎么运行它啊? 解决方案 解决方案二: 把thunder文件夹直接拷贝到wtk的apps下解决方案三: 在eclipse里新建j2me工程,然后把源码拷到src,把图片拷到res.如果找不到新建j2me工程的地方,那就是还没装j2me开发的插件.解决方案四: 同意上面的方法!解决方案五: 先装Eclips

J2ME手机游戏汉化技术基础

对国外手机游戏进行的汉化,使用该技术甚至可以辅助换皮技术,对公司已有手机游戏进行技术处理,替换掉游戏中的故事介绍.公司名称.公司标示,一切和原游戏有关的文字信息. 技术分析: 汉化分以下几种情况,分别详细说明. 1. 从内容上说 (1)对国外游戏的汉化.对国外游戏进行汉化,就是将非汉语翻译过来,转化为汉语. (2)国内游戏的"汉化".对国内游戏,就是更改游戏相关信息,配合换皮使用. 2. 从存储方式说 (1)相关信息存储在.class文件中.游戏相关信息存储在程序中. (2)相关信息存

关于J2ME手机游戏开发图片镜像翻转问题

问题描述 大家都知道一般锚点都选择在左上角那个点,我不懂一个图片镜像翻转后锚点位置到底变不变,是还在原位置还是跑到了镜像的左上角呢.这是一个手机游戏NPC转身时遇到的问题大家说说啊谢谢了!!急死了快 解决方案 解决方案二:不变的,图片左上角坐标是(5,5)那么翻转后左上角的坐标还是(5.5)这个要吧试出来的解决方案三:en谢谢了啊解决方案四:楼主..你是做手机游戏的??.恩,我能做你徒弟吗?我刚开始JAVA...要是可以的话450027009(QQ)yangjie5574@163.com无限感激

在J2ME手机编程中使用字体

编程 在J2ME手机编程中,可以通过使用字体类--Font在低级用户界面中,获得更好的表现效果,那么如何使用Font类呢?       首先,由于手机设备的限制,手机中支持的字体类型很有限,所以在J2ME中只能使用手机支持的默认字体来构造Font类对象.下面是创建Font类的对象时使用的方法:        getFont(int face,int style,int size);     例如:         Font font = Font.getFont(Font.FACE_SYSTEM