個稅小遊戲要點之節流函式(提高動畫流暢性)

2022-08-05 09:12:18 字數 2093 閱讀 1927

throttle:將乙個函式的呼叫頻率限制在一定閾值內,例如 1s 內乙個函式不能被呼叫兩次。

debounce:當呼叫函式n秒後,才會執行該動作,若在這n秒內又呼叫該函式則將取消前一次並重新計算執行時間,舉個簡單的例子,我們要根據使用者輸入做suggest,每當使用者按下鍵盤的時候都可以取消前一次,並且只關心最後一次輸入的時間就行了。

lodash對這兩個函式又增加了一些引數,主要是以下三個:

其實throttle就是設定了maxwaitdebounce。

下面,我就會帶著這幾個問題去看看lodasah的**。

function

debounce(func, wait, options)

wait = +wait || 0

if(isobject(options))

function

invokefunc(time)

function

leadingedge(time)

function

remainingwait(time)

//根據時間判斷 func 能否被執行

function

shouldinvoke(time)

function

timerexpired()

//重啟定時器,保證下一次時延的末尾觸發

timerid =settimeout(timerexpired, remainingwait(time))

}function

trailingedge(time)

//每次 trailingedge 都會清除 lastargs 和 lastthis,目的是避免最後一次函式被執行了兩次

//舉個例子:最後一次函式執行的時候,可能恰巧是前一次的 trailing edge,函式被呼叫,而這個函式又需要在自己時延的 trailing edge 觸發,導致觸發多次

lastargs = lastthis =undefined

return

result

}function

cancel() {}

function

flush() {}

function

pending() {}

function

debounced(...args)

if(maxing)

}//負責一種case:trailing 為 true 的情況下,在前乙個 wait 的 trailingedge 已經執行了函式;

//而這次函式被呼叫時 shouldinvoke 不滿足條件,因此要設定定時器,在本次的 trailingedge 保證函式被執行

if (timerid ===undefined)

return

result

}debounced.cancel =cancel

debounced.flush =flush

debounced.pending =pending

return

debounced

}

這裡我用文本來簡單描述一下流程:

首次進入函式時因為 lastcalltime === undefined 並且 timerid === undefined,所以會執行 leadingedge,如果此時 leading 為 true 的話,就會執行 func。同時,這裡會設定乙個定時器,在等待 wait(s) 後會執行 timerexpired,timerexpired 的主要作用就是觸發 trailing。

如果在還未到 wait 的時候就再次呼叫了函式的話,會更新 lastcalltime,並且因為此時 isinvoking 不滿足條件,所以這次什麼也不會執行。

時間到達 wait 時,就會執行我們一開始設定的定時器timerexpired,此時因為time-lastcalltime < wait,所以不會執行 trailingedge。

最後,如果不再有函式呼叫,就會在定時器結束時執行 trailingedge。

unity之小遊戲

歡迎來到我們的狗刨網,我們今天主要做了三個小遊戲,分別是打磚塊,滾動的盒子和 一 首先來看第乙個小遊戲 打磚塊 public gameobject wall void start for int i 0 i 10 i for int j 0 j 10 j instantiate wall,new v...

JS之小遊戲 pet

乙個網頁的小遊戲,養寵物,可以練習一下 doctype html en utf 8 viewport content width device width,initial scale 1.0 document title head pet.js script util.js script class...

小遊戲之買房記

先上遊戲圖 體驗嘛 1.窮屌絲不要緊,只有你踏實聰明,錢會慢慢多起來的,房子也會有的。2.一開始窮,不要緊,先買些低價的物品 大豆 雞肉 防毒面具等 低賣高賣。慢慢會攢到一些錢,進入第二個階段。3.第二個階段,手機有個幾萬塊,可以買手機 汽車。同樣,低買高賣,但是別買普通的物品了,即使賺錢,還是不如...