2017-08-07 137 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

我覺得這樣做,謝謝! –