我正在创建一个JavaScript增量游戏(如CookieClicker,如果你曾经玩过它)。增加一个变速计数器
要使用CookieClicker作为示例,您每秒都会生成一定数量的cookie。如果您每秒钟制作700个cookie,则该计数器每秒增加1个cookie 700次(或似乎)。
目前在我的游戏中,如果您每秒制作700个“饼干”,柜台会每秒增加700个“饼干”,而不是平稳增加一个固定金额。
我不知道如何做到这一点。我制作了一个函数,可以计算每秒制作的“饼干”的数量,并且我尝试使用该数字来使window.setInterval()
的时间参数成为一个变量,但我甚至不确定这是否可能,更不用说实用。
我敢肯定,这是不正确的做法,但我会后反正相关代码:每当频率的变化,你需要停止旧的间隔功能,启动新的
function getManaPerSecond(){
manaPerSecond = earthEssence + (windEssence * 5) + (waterEssence * 10) +
(fireEssence * 150);
};
window.setInterval(function(){
getManaPerSecond();
}, 1000);
window.setInterval(function(){
if(manaPerSecond>0){
incrementalMana++;
document.getElementById('incrementalMana').innerHTML = incrementalMana;
}
}, (1000/manaPerSecond));
我以前做过类似的事情,我的决定是,平均来说你应该有每秒60帧,所以我每秒更新计数器60次。这不是nessecerialy 100%正确,但它会给人一种“平稳流动”的印象。您可能必须使用双精度数字来获得所需的结果。根据经验,每秒60次大约每17毫秒一次(16.66666 ...)。你当然必须做'var incrementBy = manaPerSecond/60; manascore + = incrementBy'。你不应该加1,就像你在这里做的那样,而是加上X,即所需的数量。 – Automatico
你可以看看'requestAnimationFrame'有点平滑的动画https://css-tricks.com/using-requestanimationframe/ – Slai