我正在創建一個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