取得系統時間用 System.currentTimeMillis(),硬體計數器開機後每 1ms +1,回傳經過 ms 數。遊戲只需遞增整數計時,無需時分秒。
thisTime:當前硬體時間systemTime:遊戲系統時間 (硬體時間歸零後遞增)virtualTime:虛擬時間systemOffset、virtualOffset、pauseAt、frameStart/End、frameCount 等輔助計算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 等方法
}