首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

MIDP 2.0 遊戲開發系列 (6):設計 Clock 時鐘類別

     編輯:Java 程式設計入門

Clock 職責

  • 真實時間:從 0 起按 ms 遞增,與硬體時鐘同步。
  • 虛擬時間:從 0 起按 ms 遞增,但不一定與真實時間同步 (可暫停、加速、減速)。

取得系統時間用 System.currentTimeMillis(),硬體計數器開機後每 1ms +1,回傳經過 ms 數。遊戲只需遞增整數計時,無需時分秒。

核心成員變數

  • thisTime:當前硬體時間
  • systemTime:遊戲系統時間 (硬體時間歸零後遞增)
  • virtualTime:虛擬時間
  • systemOffset、virtualOffset、pauseAt、frameStart/End、frameCount 等輔助計算

完整實作代碼 (節錄自 Marshall 《Game Programming Gems 3》)

package game.engine.core;

class Clock {
    private boolean running;
    private int thisTime, lastTime;
    private int systemTime, systemOffset, pauseAt;
    private int virtualTime, virtualOffset;
    private int frameStart, frameEnd, frameCount;

    public Clock() { reset(); }

    public void reset() {
        running = false;
        thisTime = (int)System.currentTimeMillis();
        lastTime = thisTime;
        systemTime = 0; systemOffset = thisTime; pauseAt = 0;
        virtualTime = 0; virtualOffset = 0;
        frameStart = frameEnd = frameCount = 0;
    }

    private void update() {
        lastTime = thisTime;
        thisTime = (int)System.currentTimeMillis();
        systemTime += (thisTime - lastTime);
    }

    public void start() {
        if (!running) {
            running = true;
            update();
            virtualOffset += (systemTime - pauseAt);
            System.out.println("[start]");
        }
    }

    public void stop() {
        if (running) {
            running = false;
            update();
            pauseAt = systemTime;
            System.out.println("[stop] at " + pauseAt);
        }
    }
    // 以下原文未完整,含 getSystemTime、getVirtualTime、beginFrame、advanceToEnd 等方法
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved