我设置游戏循环如下:
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
从而使effectsOn变为false。有什么好的替代方法来实现我的目标吗?
在最坏的情况下,我可以在主菜单中设置一个复选框,让用户决定是否渲染特殊效果。。。
最佳答案
刚开始的时候把特效留下。
如果在第一帧n
之后,平均渲染时间太长,请将其关闭,然后将其关闭。
关于javascript - 仅当帧频允许时才在html5 canvas中呈现特殊效果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10815193/