2012-05-30 70 views
2

設置我的遊戲循環如下:渲染HTML5畫布特效,只有當幀率允許它

window.requestAnimFrame = (function(){ 
     return window.requestAnimationFrame || 
      window.webkitRequestAnimationFrame || 
      window.mozRequestAnimationFrame || 
      window.oRequestAnimationFrame  || 
      window.msRequestAnimationFrame  || 
      function(callback){ 
       window.setTimeout(callback, 1000/60); 
      }; 
    })(); 
    (function gameLoop() { 
     var time    = new Date().getTime(); 
     var dt     = (time - prevFTime)/1000.0; 
     prevFTime    = time; 

     state.effectsOn   = dt > 1/60.0 ? true : false; 
     state.effectsOn   = false; 

     //game rendering logic goes here 

     window.requestAnimFrame(gameLoop); 
    })(); 

現在我想要做的是,如果effectsOn變量在良好的幀速率設置的原因,那麼我會在我的遊戲中呈現一些特殊效果。如果沒有,我會簡單地跳過渲染這些特殊效果。

但我明顯的問題是,如果dt>1/60和effectsOn設置爲true。我將渲染特殊效果,這將導致渲染時間的增加,因此可能會使dt < 1/60因此使effectOn爲false。

有什麼好的替代方法來實現我想要做的?

在最壞的情況下,我可以把一個複選框之類的事情在我的主菜單,讓用戶決定是否渲染特效或不...

+1

順便說一句,如果可能的話,不要只是開/關。您可以嘗試設置粒子數量,如所有/最/少/無,取決於幀率。 – Kos

+0

我也會推薦什麼樣的「大型」遊戲可以在專門設置的屏幕上進行測量,其中有很多效果並基於此設置設置,以便用戶通過遊戲獲得一致的體驗。 – Kos

回答

2

剛剛離開最初的特殊效果。

如果在第一個n幀之後平均渲染時間太長,請關閉它們並將它們關閉。

+0

最好允許用戶也可以永久地將它們重新打開。 –