|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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,代码照样能够编译运行的。 |
|