2017-08-07 59 views
0

我正在创建一个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)); 
+0

我以前做过类似的事情,我的决定是,平均来说你应该有每秒60帧,所以我每秒更新计数器60次。这不是nessecerialy 100%正确,但它会给人一种“平稳流动”的印象。您可能必须使用双精度数字来获得所需的结果。根据经验,每秒60次大约每17毫秒一次(16.66666 ...)。你当然必须做'var incrementBy = manaPerSecond/60; manascore + = incrementBy'。你不应该加1,就像你在这里做的那样,而是加上X,即所需的数量。 – Automatico

+0

你可以看看'requestAnimationFrame'有点平滑的动画https://css-tricks.com/using-requestanimationframe/ – Slai

回答

1

一。

var manaCounter; 
var oldManaPerSecond = 0; 
function restartManaCounter(manaPerSecond) { 
    if (manaPerSecond != oldManaPerSecond) { 
     clearInterval(manaCounter); 
     oldManaPerSecond = manaPerSecond; 
     if (manaPerSecond > 0) { 
      manaCounter = setInterval(function() { 
       incrementalMana++; 
       document.getElementById('incrementalMana').innerHTML = incrementalMana; 
      }, 1000/manaPerSecond); 
     } 
    } 
} 

function getManaPerSecond(){ 
    var manaPerSecond = earthEssence + (windEssence * 5) + (waterEssence * 10) + (fireEssence * 150); 
    return manaPerSecond; 
}; 

window.setInterval(function() { 
    restartManaCounter(getManaPerSecond()); 
}, 1000); 
+0

嗯,这是不对的。每当我重新开始游戏并购买一座建筑物(每秒产生1点法力值)时,计数器从1到3到6到10等(换句话说,+1,+ 2,+ 3,+ 4,+5),而不是以动态速度增加1。 –

+1

对不起,调用'setInterval'的代码应该在第一个'if'中。 – Barmar

+0

我觉得这样做,谢谢! –