2017-07-24 88 views
0

這裏是我的calculateFPS功能:計算FPS的Javascript

function calculateFPS() { 
    const now = performance.now(); 
    if(fps.lastCalledTime !== null) { 
    fps.counter++; 

    const secondsPerFrame = (now - fps.lastCalledTime)/1000; 
    fps.totalFPS += 1/secondsPerFrame; 
    if(fps.counter === 20) { 
     fps.fps = Math.round(fps.totalFPS/fps.counter); 
     fps.totalFPS = 0; 
     fps.counter = 0; 
    } 
    } 
    fps.lastCalledTime = now; 
} 

這裏是我的FPS全局對象:

let fps = { 
    lastCalledTime: null, 
    fps: 60, 
    counter: 0, 
    totalFPS: 0, 
} 

然而,當我看到我的遊戲放緩(遊戲是割草(如果我正確翻譯))基本上FPS應該下降...而不是它上升到400 - 500

我做錯了什麼?

預先感謝您...

回答

0

可以計算兩個函數之間的時間差調用這樣

let then = performance.now(); 
let now; 
let frame = 1000/60; 

function animate() { 

    now = performance.now(); 
    console.log(((now - then)/frame) * 60); 
    then = now; 

} 

setInterval(animate, frame); 
+0

我讀過後,使用Date.now()不是很好那種功能。此外,我不需要計算兩個功能之間的時間差。我需要FPS,請告訴我爲什麼當遊戲變慢時我會變大FPS?它不應該被顛倒嗎?甚至爲什麼我有時會得到FPS在400-500 FPS之間(WTF ?? 400 - 500 FPS甚至在今天的機器上都不可能)......我不滿意你的答案,所以我不把它標記爲正確答案 – durisvk10

+0

它也適用於performance.now。你想的太複雜了,你不需要有一個每幀增加1的fps計數器。在這個例子中,以毫秒爲單位的差值除以理想情況下一幀應該採用的毫秒數,即1000/60。你可以在這裏看到一個可用的jsfiddle:https://jsfiddle.net/w4waap2p/3/根據你的環境,控制檯將顯示在59和61之間波動的fps計數。 – Kokodoko