J2ME手机游戏引擎程序结构简述.doc_第1页
J2ME手机游戏引擎程序结构简述.doc_第2页
J2ME手机游戏引擎程序结构简述.doc_第3页
J2ME手机游戏引擎程序结构简述.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

J2ME 手机游戏引擎程序结构简述游戏引擎的结构很多,不过基本上都是在一个游戏主循环内实现。程序里面的主循环包含了程序框架的最主要的结构体。J2me的程序一般都包含两个class文件,一个是MIDlet,一个是Displayable。一般我都是把游戏的主要代码放在Displayable这个类里面。这个类是基于事件驱动的程序,有三个主要相应函数 void paint(Graphics g),void keyPressed(int keyCode),void keyReleased(int keyCode)。 1.使用Runnable和创建线程的主循环 一般主体的做法就是让Displayable这个类实现Runnable这个接口,然后在其构造函数中创建一个线程,启动其run()函数,而run函数里面就包含了游戏的主循环。下面是我在仙剑里面的片断代码。 Code:public class GameMIDlet extends MIDlet static GameMIDlet instance;Display display;GameDisplayable displayable = null;public GameMIDlet() instance = this;display = Display.getDisplay(this);displayable = new GameDisplayable();public void startApp() display.setCurrent(displayable);public void pauseApp() public void destroyApp(boolean unconditional) displayable.running = false;public static void quitApp() instance.destroyApp(true);instance.notifyDestroyed();instance = null;public class GameDisplayable extends FullCanvas implements Runnable /* 主控制线程 */Thread MainThread = null;/* 游戏时钟间隔 毫秒为单位 */public static long timeinterval = 20;public static boolean Isstable = true;/* 用于游戏时钟的变量 */public static long timeold = 0;public static long timenow = 0;public long interval = 0;public static long frames_per_second = 0;int count = 0;long second = 0;public static boolean running = true;public GameDisplayable() / 开始主线程Thread MainThread = new Thread(this);MainThread.start();public void run() while (running) timenow = System.currentTimeMillis();interval = timenow - timeold;if (interval = timeinterval) timeold = timenow;Game_Process();if (second != (System.currentTimeMillis() / 1000) second = System.currentTimeMillis() / 1000;frames_per_second = count;count = 1;elsecount+;lib.sleep(30); 其中关于控制主循环速度的代码可以不要,但是lib.sleep(30)必须保留,因为在Nokia 60的手机上,如果去除了sleep(30),那么游戏将无法切换回来。同时,在游戏中任何一个内部循环中,也必须加入sleep(30)这个等待,才能让游戏可以切换回来,至于为什么这样做,我暂时还不清楚。30ms是我测试过没有问题的数值,可能比30ms还小的值也是没有问题的。 同时,在MOTO的手机上,必须将游戏的主循环放在一个线程中,游戏才能切换回来,不过可以不加上面说的sleep(30)延时。 2.不使用线程的主循环办法 这个办法只能在Nokia的平台上实现,而我只建议在Nokia 40的平台上做,这样不需要线程,道理上来说节约了一些内存,如果不是内存很紧张的机型,那么最好还是使用上一种办法。 游戏的主循环放在MIDlet的class里面,具体做法如下: public class GameMIDlet extends MIDlet GameDisplayable displayable = null;/* 游戏时钟间隔 毫秒为单位 */public static long timeinterval = 0;/用于游戏时钟的变量public static long timeold = 0;public static long timenow = 0;public long interval = 0;public static long frames_per_second=0;int count=0;long second =0;public static boolean running = false;static boolean exitApp =false;public GameMIDlet() displayable = new GameDisplayable();running =true;public void startApp() running =true;Display.getDisplay(this).setCurrent(displayable);while(running) timenow = System.currentTimeMillis();interval = timenow - timeold;if (interval = timeinterval) timeold = timenow;displayable.Game_Process();if(second != (System.currentTimeMillis() /1000)second = System.currentTimeMillis()/1000;frames_per_second = count;count = 1;elsecount +;if(exitApp) destroyApp(true);notifyDestroyed();publi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论