要獲得系統(tǒng)時(shí)間可以用System.currentTimeMillies(),系統(tǒng)硬件有一個(gè)PRogramming Gems 3"中的C++代碼,主要成員變量:
thisTime:當(dāng)前硬件時(shí)間,即System.currentTimeMillies()
systemTime:游戲的系統(tǒng)時(shí)間,即把thisTime轉(zhuǎn)換為從0遞增的時(shí)間
virtualTime:虛擬時(shí)間,從0遞增,但和真實(shí)時(shí)間不同步
代碼如下:
package game.engine.core;class Clock { // Clock是否運(yùn)行: private boolean running; // 當(dāng)前hardware clock: private int thisTime; // record the last hardware clock when calling stop(): private int lastTime; // systemTime從0開(kāi)始遞增,和硬件時(shí)鐘同步: private int systemTime; // systemOffset就是硬件時(shí)鐘和systemTime的差: private int systemOffset; // 上一次停止的systemTime: private int pauseAt; // virtualTime starts from 0. private int virtualTime; // virtualOffset records how long the clock paused: private int virtualOffset; private int frameStart; private int frameEnd; private int frameCount; public Clock() { reset(); } // 重置Clock: public void reset() { running = false; // get the hardware clock: thisTime = (int)System.currentTimeMillis(); lastTime = thisTime; // and systemTime starts from 0: systemTime = 0; systemOffset = thisTime; pauseAt = 0; // init virtual time: virtualTime = 0; virtualOffset = 0; // init frame time: frameStart = 0; frameEnd = 0; frameCount = 0; } // 同步hardware clock: private void update() { lastTime = thisTime; thisTime = (int)System.currentTimeMillis(); // increase the systemTime: systemTime += (thisTime - lastTime); } // 啟動(dòng)Clock: public void start() { if(!running) { running = true; update(); virtualOffset += (systemTime - pauseAt); System.out.println("[start]"); } } // 停止Clock: public void stop() { if(running) { running = false; update(); pauseAt = systemTime; System.out.println("[stop] at " + pauseAt); } } // Clock是否運(yùn)行: pu
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注