<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      J2ME游戲開發中時鐘的容易完成

      [摘要]在java.util包中有一個TimerTask類,你可以擴展這個類并且實現他的run()方法,在run()方法中編寫我們的邏輯代碼。如果我們想制作一個游戲時鐘,那么非常簡單我們編寫一個GameClock類擴展TimerTask,GameClock需要維持一個實例變量timeLeft,這樣我們就可...

        在java.util包中有一個TimerTask類,你可以擴展這個類并且實現他的run()方法,在run()方法中編寫我們的邏輯代碼。如果我們想制作一個游戲時鐘,那么非常簡單我們編寫一個GameClock類擴展TimerTask,GameClock需要維持一個實例變量timeLeft,這樣我們就可以記錄游戲剩余的時間了,在每次run()運行的時候把timeLeft減1就可以了。有時候我們需要始終暫停以及重新啟動,這并不復雜,在GameClock中添加一個boolean類型的標記就可以了。下面給出GameClock的代碼:

      /*
       * GameClock.java
       *
       * Created on 2005年7月18日, 上午11:00
       *
       * To change this template, choose Tools Options and locate the template under
       * the Source Creation and Management node. Right-click the template and choose
       * Open. You can then make changes to the template in the Source Editor.
       */

      package com.j2medev.gameclock;
      import java.util.TimerTask;
      /**
       *
       * @author Administrator
       */
      public class GameClock extends TimerTask{
         
          private int timeLeft = 60;//時鐘的默認時間
          private boolean pause = false;
          /** Creates a new instance of GameClock */
          public GameClock() {
          }
         
          public GameClock(int value){
              timeLeft = value;
          }
         
          public void run(){
              if(!pause){
                  timeLeft--;
              }
          }
         
          public void pause(){
              pause = true;
          }
         
          public void resume(){
              pause = false;
          }
         
          public int getTimeLeft(){
              return timeLeft;
          }
         
          public void setTimeLeft(int _value){
              this.timeLeft = _value;
          }
      }

        當我們使用這個時鐘的時候,只需要把它的一個實例作為參數傳給Timer的schedule()方法即可。例如

            clock = new GameClock(30);
            timer.schedule(clock,0,1000);

        接下來我們編寫一個簡單的游戲界面測試一下時鐘。我們在程序啟動的時候開始計時,每隔一秒鐘timeLeft會減少1,并且在手機屏幕上顯示當前剩余的時間。如果timeLeft為0的時候代表游戲已經結束了。因此我們需要這樣判斷游戲的狀態。

          public void verifyGameState(){
              timeLeft = clock.getTimeLeft();
              if(timeLeft == 0){
                  going = false;
              }
          }

        為了測試時鐘的暫停功能,我們接收用戶的按鍵行為,如果左鍵被按下,那么調用clock的pause()方法,如果右鍵被按下則調用clock的resume()方法。

          public void userInput(){
              int keyStates = this.getKeyStates();
              if((keyStates & GameCanvas.LEFT_PRESSED) != 0){
                  clock.pause();
              }else if((keyStates & GameCanvas.RIGHT_PRESSED) != 0){
                  clock.resume();
              }
                 
          }

        下面給出MIDlet和Canvas的代碼:

      /*
       * ClockCanvas.java
       *
       * Created on 2005年7月18日, 上午11:04
       *
       * To change this template, choose Tools Options and locate the template under
       * the Source Creation and Management node. Right-click the template and choose
       * Open. You can then make changes to the template in the Source Editor.
       */

      package com.j2medev.gameclock;
      import java.util.Timer;
      import javax.microedition.lcdui.Command;
      import javax.microedition.lcdui.Graphics;
      import javax.microedition.lcdui.game.*;

      /**
       *
       * @author Administrator
       */
      public class ClockCanvas extends GameCanvas implements Runnable {
         
          private Timer timer = new Timer();
          private GameClock clock = null;
          private boolean going = true;
          int timeLeft = 0;
          /** Creates a new instance of ClockCanvas */
          public ClockCanvas() {
              super(false);
          }
         
          public void run(){
              clock = new GameClock(30);
              timer.schedule(clock,0,1000);
              while(going){
                  verifyGameState();
                  userInput();
                  repaint();
                  try{
                      Thread.sleep(100);
                  }catch(Exception e){
                      e.printStackTrace();
                  }
                 
              }
          }
         
          public void userInput(){
              int keyStates = this.getKeyStates();
              if((keyStates & GameCanvas.LEFT_PRESSED) != 0){
                  clock.pause();
              }else if((keyStates & GameCanvas.RIGHT_PRESSED) != 0){
                  clock.resume();
              }
                 
          }
         
          public void paint(Graphics g){
              int color = 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);
                 
              }
             
             
          }
         
          public void verifyGameState(){
              timeLeft = clock.getTimeLeft();
              if(timeLeft == 0){
                  going = false;
              }
          }
         
          public void start(){
              Thread t = new Thread(this);
              t.start();
          }
         
          public void stop(){
              going = false;
          }
         
      }

      /*
       * TestMidlet.java
       *
       * Created on 2005年7月18日, 上午11:00
       */

      package com.j2medev.gameclock;

      import javax.microedition.midlet.*;
      import javax.microedition.lcdui.*;

      /**
       *
       * @author  Administrator
       * @version
       */
      public class TestMidlet extends MIDlet {
         
          private Display display = null;
         
          public void startApp() {
              display = Display.getDisplay(this);
              ClockCanvas canvas = new ClockCanvas();
              canvas.start();
              display.setCurrent(canvas);
          }
         
          public void pauseApp() {
          }
         
          public void destroyApp(boolean unconditional) {
          }
      }

        程序運行的截圖如下:

         總結:本文實現了一個游戲開發中可能用到的時鐘程序,代碼并不復雜。希望能對大家有所幫助。





      日韩精品一区二区三区高清