|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
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年代初开发。 |
|