仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 467|回复: 11
打印 上一主题 下一主题

[学习教程] JAVA编程:J2ME游戏开辟中时钟的复杂完成

[复制链接]
跳转到指定楼层
楼主
发表于 2015-1-18 11:09:37 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
C++编译的是本地码,优点是启动快,而且可以精确控制资源因此可以开发很高效的程序.缺点是编程麻烦,而且容易留下安全隐患.跨平台靠源代码在各个平台间分别编译(一处编写到处编译)时钟  在游戏开辟中,偶然候我们必要一个时钟来纪录游戏的工夫,假如工夫停止则停止游戏。本文先容怎样在J2ME中利用Timer和TimerTask来完成如许一个时钟,并给出详细代码实例。  在java.util包中有一个TimerTask类,你能够扩大这个类而且完成他的run()办法,在run()办法中编写我们的逻辑代码。假如我们想制造一个游戏时钟,那末十分复杂我们编写一个GameClock类扩大TimerTask,GameClock必要保持一个实例变量timeLeft,如许我们就能够纪录游戏残剩的工夫了,在每次run()运转的时分把timeLeft减1就能够了。偶然候我们必要一直停息和从头启动,这其实不庞大,在GameClock中增加一个boolean范例的标志就能够了。上面给出GameClock的代码:

/*
*GameClock.java
*
*Createdon2005年7月18日,上午11:00
*
*Tochangethistemplate,chooseTools|Optionsandlocatethetemplateunder
*theSourceCreationandManagementnode.Right-clickthetemplateandchoose
*Open.YoucanthenmakechangestothetemplateintheSourceEditor.
*/
packagecom.j2medev.gameclock;
importjava.util.TimerTask;
/**
*
*@authorAdministrator
*/
publicclassGameClockextendsTimerTask{

privateinttimeLeft=60;//时钟的默许工夫
privatebooleanpause=false;
/**CreatesanewinstanceofGameClock*/
publicGameClock(){
}

publicGameClock(intvalue){
timeLeft=value;
}

publicvoidrun(){
if(!pause){
timeLeft--;
}
}

publicvoidpause(){
pause=true;
}

publicvoidresume(){
pause=false;
}

publicintgetTimeLeft(){
returntimeLeft;
}

publicvoidsetTimeLeft(int_value){
this.timeLeft=_value;
}
}
  当我们利用这个时钟的时分,只必要把它的一个实例作为参数传给Timer的schedule()办法便可。比方

clock=newGameClock(30);
timer.schedule(clock,0,1000);
  接上去我们编写一个复杂的游戏界面测试一下时钟。我们在程序启动的时分入手下手计时,每隔一秒钟timeLeft会削减1,而且在手机屏幕上显现以后残剩的工夫。假如timeLeft为0的时分代表游戏已停止了。因而我们必要如许判别游戏的形态。

publicvoidverifyGameState(){
timeLeft=clock.getTimeLeft();
if(timeLeft==0){
going=false;
}
}

  为了测试时钟的停息功效,我们吸收用户的按键举动,假如左键被按下,那末挪用clock的pause()办法,假如右键被按下则挪用clock的resume()办法。

publicvoiduserInput(){
intkeyStates=this.getKeyStates();
if((keyStates&GameCanvas.LEFT_PRESSED)!=0){
clock.pause();
}elseif((keyStates&GameCanvas.RIGHT_PRESSED)!=0){
clock.resume();
}

}
  上面给出MIDlet和Canvas的代码:

/*
*ClockCanvas.java
*
*Createdon2005年7月18日,上午11:04
*
*Tochangethistemplate,chooseTools|Optionsandlocatethetemplateunder
*theSourceCreationandManagementnode.Right-clickthetemplateandchoose
*Open.YoucanthenmakechangestothetemplateintheSourceEditor.
*/
packagecom.j2medev.gameclock;
importjava.util.Timer;
importjavax.microedition.lcdui.Command;
importjavax.microedition.lcdui.Graphics;
importjavax.microedition.lcdui.game.*;
/**
*
*@authorAdministrator
*/
publicclassClockCanvasextendsGameCanvasimplementsRunnable{

privateTimertimer=newTimer();
privateGameClockclock=null;
privatebooleangoing=true;
inttimeLeft=0;
/**CreatesanewinstanceofClockCanvas*/
publicClockCanvas(){
super(false);
}

publicvoidrun(){
clock=newGameClock(30);
timer.schedule(clock,0,1000);
while(going){
verifyGameState();
userInput();
repaint();
try{
Thread.sleep(100);
}catch(Exceptione){
e.printStackTrace();
}

}
}

publicvoiduserInput(){
intkeyStates=this.getKeyStates();
if((keyStates&GameCanvas.LEFT_PRESSED)!=0){
clock.pause();
}elseif((keyStates&GameCanvas.RIGHT_PRESSED)!=0){
clock.resume();
}

}

publicvoidpaint(Graphicsg){
intcolor=g.getColor();
g.setColor(0xffffff);
g.fillRect(0,0,this.getWidth(),this.getHeight());
g.setColor(color);

if(timeLeft==0){
g.drawString("游戏停止",this.getWidth()/2,this.getHeight()/4,Graphics.HCENTER|Graphics.BOTTOM);
}else{
g.drawString("游戏残剩工夫:"+timeLeft,this.getWidth()/2,this.getHeight()/4,Graphics.HCENTER|Graphics.BOTTOM);

}


}

publicvoidverifyGameState(){
timeLeft=clock.getTimeLeft();
if(timeLeft==0){
going=false;
}
}

publicvoidstart(){
Threadt=newThread(this);
t.start();
}

publicvoidstop(){
going=false;
}

}

/*
*TestMidlet.java
*
*Createdon2005年7月18日,上午11:00
*/
packagecom.j2medev.gameclock;
importjavax.microedition.midlet.*;
importjavax.microedition.lcdui.*;
/**
*
*@authorAdministrator
*@version
*/
publicclassTestMidletextendsMIDlet{

privateDisplaydisplay=null;

publicvoidstartApp(){
display=Display.getDisplay(this);
ClockCanvascanvas=newClockCanvas();
canvas.start();
display.setCurrent(canvas);
}

publicvoidpauseApp(){
}

publicvoiddestroyApp(booleanunconditional){
}
}

  程序运转的截图以下:





   总结:本文完成了一个游戏开辟中大概用到的时钟程序,代码其实不庞大。但愿能对人人有所匡助。

你希望java的IDE整合。这个是没有必要的,重要的是你理解java有多深以及怎么组织你的代码,即使没有IDE,代码照样能够编译运行的。
精灵巫婆 该用户已被删除
12#
发表于 2015-3-26 06:32:59 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
冷月葬花魂 该用户已被删除
11#
发表于 2015-3-18 17:43:47 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
若相依 该用户已被删除
10#
发表于 2015-3-11 14:09:24 | 只看该作者
是一种突破用户端机器环境和CPU
乐观 该用户已被删除
9#
发表于 2015-3-4 00:28:54 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
山那边是海 该用户已被删除
8#
发表于 2015-2-13 18:42:40 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
柔情似水 该用户已被删除
7#
发表于 2015-2-7 09:28:49 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
深爱那片海 该用户已被删除
6#
发表于 2015-2-7 02:03:46 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
小魔女 该用户已被删除
5#
发表于 2015-2-1 09:36:59 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
变相怪杰 该用户已被删除
地板
发表于 2015-1-29 19:55:07 来自手机 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
板凳
 楼主| 发表于 2015-1-20 20:08:41 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
活着的死人 该用户已被删除
沙发
发表于 2015-1-20 09:20:48 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-24 05:34

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表