六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

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

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) {
    }
}

  程序運行的截圖如下:

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





主站蜘蛛池模板: 一区二区视频网 | 一区二区三区视频在线 | 日本一道dvd在线播放 | 亚洲 欧美 精品 中文第三 | 亚洲视频一区二区 | 日本天堂在线 | 在线观看亚洲免费视频 | 欧美天天 | 午夜影院在线免费 | 日本网站在线播放 | 伊人中文字幕在线观看 | 亚洲欧美日本在线 | 午夜啪啪福利视频 | 青青草免费公开视频 | 欧美亚洲黄色 | 亚洲日本欧美产综合在线 | 欧美亚洲国产精品久久第一页 | 日本黄色动态图 | 任我爽在线视频精品凹凸精品分类 | 中文字幕第23页 | 天天五月天丁香婷婷深爱综合 | 亚洲精品有码在线观看 | 日日夜夜免费精品 | 色综合久久88色综合天天提莫 | 日韩中文字幕久久精品 | 日日摸日日碰夜夜爽97纠 | 人人看人人做 | 天天干夜夜做 | 亚洲最稳定资源在线观看 | 伊人免费视频二 | 亚洲综合资源 | 青草综合| 欧美视频在线免费看 | 日本视频在线观看播放免费 | 杨幂国产精品福利在线观看 | 日韩伦理片网站 | 一二三四在线观看免费高清网 | 最新99热 | 特黄特黄一级片 | 日本一区二区三区四区无限 | 色噜噜狠狠色综合久 |