小妖女 发表于 2015-1-18 11:36:16

JAVA网页编程之j2me游戏引擎程序布局

Java的桌面程序开发在java程序员里通常叫swing开发,主要用的swing包里的类开发的,也就是通常说的c/s架构开发程序游戏引擎的布局良多,不外基础上都是在一个游戏主轮回内完成。程序内里的主轮回包括了程序框架的最次要的布局体。J2me的程序一样平常都包括两个class文件,一个是MIDlet,一个是Displayable。一样平常我都是把游戏的次要代码放在Displayable这个类内里。这个类是基于事务驱动的程序,有三个次要响应函数voidpaint(Graphicsg),voidkeyPressed(intkeyCode),voidkeyReleased(intkeyCode)。



1.利用Runnable和创立线程的主轮回

一样平常主体的做法就是让Displayable这个类完成Runnable这个接口,然后在其机关函数中创立一个线程,启动其run()函数,而run函数内里就包括了游戏的主轮回。上面是我在仙剑内里的片段代码。



publicclassGameMIDletextendsMIDlet{

staticGameMIDletinstance;

Displaydisplay;

GameDisplayabledisplayable=null;



publicGameMIDlet(){

instance=this;

display=Display.getDisplay(this);

displayable=newGameDisplayable();

}



publicvoidstartApp(){

display.setCurrent(displayable);

}



publicvoidpauseApp(){

}



publicvoiddestroyApp(booleanunconditional){

displayable.running=false;

}



publicstaticvoidquitApp(){

instance.destroyApp(true);

instance.notifyDestroyed();

instance=null;

}

}



publicclassGameDisplayableextendsFullCanvasimplementsRunnable{

/**主把持线程*/

ThreadMainThread=null;

/**游戏时钟距离毫秒为单元*/

publicstaticlongtimeinterval=20;

publicstaticbooleanIsstable=true;



/*用于游戏时钟的变量*/

publicstaticlongtimeold=0;

publicstaticlongtimenow=0;

publiclonginterval=0;

publicstaticlongframes_per_second=0;

intcount=0;

longsecond=0;

publicstaticbooleanrunning=true;

publicGameDisplayable(){

//入手下手主线程

ThreadMainThread=newThread(this);

MainThread.start();

}

publicvoidrun(){

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)必需保存,由于在Nokia60的手机上,假如往除sleep(30),那末游戏将没法切换返来。同时,在游戏中任何一个外部轮回中,也必需到场sleep(30)这个守候,才干让游戏能够切换返来,至于为何如许做,我临时还不分明。30ms是我测试过没有成绩的数值,大概比30ms还小的值也是没有成绩的。



同时,在MOTO的手机上,必需将游戏的主轮回放在一个线程中,游戏才干切换返来,不外能够不加下面说的sleep(30)延时。



2.不利用线程的主轮回举措

这个举措只能在Nokia的平台上完成,而我只倡议在Nokia40的平台上做,如许不必要线程,事理下去说勤俭了一些内存,假如不是内存很严重的机型,那末最好仍是利用上一种举措。



游戏的主轮回放在MIDlet的class内里,详细做法以下:

publicclassGameMIDletextendsMIDlet{

GameDisplayabledisplayable=null;



/**游戏时钟距离毫秒为单元*/

publicstaticlongtimeinterval=0;

//用于游戏时钟的变量

publicstaticlongtimeold=0;

publicstaticlongtimenow=0;

publiclonginterval=0;

publicstaticlongframes_per_second=0;

intcount=0;

longsecond=0;

publicstaticbooleanrunning=false;

staticbooleanexitApp=false;



publicGameMIDlet(){

displayable=newGameDisplayable();

running=true;

}



publicvoidstartApp(){

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();

}



}



publicvoidpauseApp(){

running=false;

}



publicvoiddestroyApp(booleanunconditional){

running=false;

}



publicstaticvoidquitApp(){

running=false;

exitApp=true;

}



}




JAVA是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由升阳(SunMicrosystems)公司的詹姆斯·高斯林(JamesGosling)等人于1990年代初开发。

飘灵儿 发表于 2015-1-19 09:13:52

是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言

乐观 发表于 2015-1-23 07:13:44

还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。

愤怒的大鸟 发表于 2015-1-24 15:23:32

吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧

若相依 发表于 2015-2-1 18:40:39

Java 编程语言的风格十分接近C、C++语言。

深爱那片海 发表于 2015-2-2 18:51:35

当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?

第二个灵魂 发表于 2015-2-3 12:35:19

是一种使用者不需花费很多时间学习的语言

因胸联盟 发表于 2015-2-6 14:52:31

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

爱飞 发表于 2015-2-10 23:02:42

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

小魔女 发表于 2015-2-11 19:12:42

另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。

海妖 发表于 2015-3-2 17:04:10

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

不帅 发表于 2015-3-11 04:41:27

一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。

金色的骷髅 发表于 2015-3-11 14:38:13

Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站

admin 发表于 2015-3-11 18:24:41

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

精灵巫婆 发表于 2015-3-11 20:48:36

《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。

小妖女 发表于 2015-3-18 11:58:46

是一种语言,用以产生「小应用程序(Applet(s))

兰色精灵 发表于 2015-3-21 09:36:52

Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。

冷月葬花魂 发表于 2015-4-1 07:54:16

Java是一种计算机编程语言,拥有跨平台、面向对java

仓酷云 发表于 2015-4-5 20:39:16

是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言

老尸 发表于 2015-4-10 12:22:05

有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
页: [1]
查看完整版本: JAVA网页编程之j2me游戏引擎程序布局