美化什麼@emackey說,
簡短的回答是你不能。你可以讓計算機在每一幀中完成無限量的工作。我不能保證在有限的時間內完成這項工作。
最重要的是,每臺電腦有不同的電量。廉價的集成GPU比高端顯卡功耗低得多。英特爾i3比i7慢得多。
您還提到更改畫布大小。繪製300x150的畫布只有45000像素的工作量。繪製一個1920x1080的畫布將是2,073,600像素的工作或46x更多的工作
您可以做的最好的工作是儘可能減少工作量,或者自動或通過用戶選擇在慢速硬件上刪除功能。大多數遊戲都這樣做。他們的圖形設置選項,用戶可以選擇分辨率,紋理水平,抗混疊水平和其他各種各樣的東西。這就是說,你可以嘗試做你的計算,使你的應用程序中的事物以相對於時間的一致速度移動。在較慢的機器上或較大的畫布上,幀率可能較慢,但每秒移動的距離仍保持不變。
您可以通過使用經過的時間值做到這一點爲
function render(time) {
// time is time in milliseconds since the page was loaded
...do work...
requestAnimationFrame(render);
}
requestAnimationFrame(render);
例如這裏是非幀率獨立動畫
function render(time) {
xPosition = xPosition + velocity;
...
requestAnimationFrame(render);
}
requestAnimationFrame(render);
和這裏的幀速率獨立動畫
var then = 0;
function render(time) {
var timeInSeconds = time * 0.001;
var deltaTimeInSeconds = timeInSeconds - then;
then = timeInSeconds;
xPosition = xPosition + velocityInUnitsPerSecond * deltaTimeInSeconds;
...
requestAnimationFrame(render);
}
requestAnimationFrame(render);
注意:傳入requestAnimationFrame的時間比Date.now()
Here's an article on it with animations
更高的分辨率