电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 在线教程-> JSP教程
j2me游戏引擎程序结构-JSP教程,J2ME开发
作者:网友供稿 点击:25
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
游戏引擎的结构很多,不过基本上都是在一个游戏主循环内实现。程序里面的主循环包含了程序框架的最主要的结构体。j2me的程序一般都包含两个class文件,一个是midlet,一个是displayable。一般我都是把游戏的主要代码放在displayable这个类里面。这个类是基于事件驱动的程序,有三个主要相应函数void paint(graphics g),void keypressed(int keycode),void keyreleased(int keycode)。



1. 使用runnable和创建线程的主循环

一般主体的做法就是让displayable这个类实现runnable这个接口,然后在其构造函数中创建一个线程,启动其run()函数,而run函数里面就包含了游戏的主循环。下面是我在仙剑里面的片断代码。



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;

}

else

count++;

}

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;

}else

count ++;

}

}

if(exitapp) {

destroyapp(true);

notifydestroyed();

}



}



public void pauseapp() {

running =false;

}



public void destroyapp(boolean unconditional) {

running = false;

}



public static void quitapp() {

running =false;

exitapp =true;

}



}




文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·IReport与JasperReport开发详解一-JSP教程,Java技巧及代码
·JSTL(JSP标准标签库)介绍-JSP教程,资料/其它
·格式化输入日期时间控件 JieFormattedDateBox-JSP教程,Java技巧及代码
·JSTL简化JSP编码-JSP教程,Jsp/Servlet
·JUnit和单元测试入门简介-JSP教程,Java技巧及代码
·从数据库中读取一个图片并保存为一个图片文件-JSP教程,数据库相关
·Java Swing入门基础-JSP教程,Java技巧及代码
·IntelliJ IDEA培训-JSP教程,Java技巧及代码
·通过JSP的预编译消除性能瓶颈-JSP教程,Jsp/Servlet
·Java中利用JMF编写摄像头拍照程序-JSP教程,Java技巧及代码

最新文章
·J2ME中的时间处理方法
·J2ME播放声音流程简介
·J2ME开发之手机键盘使用注意问题
·J2ME 记录管理存储
·MVC模式在j2me项目中的应用(二)
·MVC模式在j2me项目中的应用(一)
·J2ME中使用记录存储系统(RMS)存储信息
·J2ME与MIDP开发(1)
·用简单的J2ME程序测试MIDlet的生命周期
·JAVA基础:提升JSP应用程序的七大绝招


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号