對於代碼練習和改進目的,我正在編寫一個簡單的遊戲(目前它的通用程度足以成爲遊戲引擎)。我現在有很多setInterval
調用運行,即每個「實體」(預製/播放器)看着按鍵,檢查衝突,更新位置引用等。我只是想知道什麼樣的性能問題(如果有的話)可能來自大量單獨的setIntervals。他們之間的時間關係並不重要,所以我並不擔心他們不同步(反正他們有稍微不同的時間間隔),但是會有一個循環遍歷所有實體來運行所有檢查的單個setInterval
更高效?我唯一擔心的是該功能可能需要比間隔時間更長的時間。創造新的時間間隔是否會產生足夠的壓力讓人擔心,當每個人做了相當少量的時候?多用途特定設置間隔或單個超級間隔
3
A
回答
3
首先,我不會使用setInterval
,因爲如果回調中的代碼執行的時間比間隔長,那麼回調可能會一個接一個堆疊併發生。
至於有多個計時器,我不認爲這是一個好主意,即使你不關心同步。如果你想調節你的遊戲速度,它會讓整體事情太複雜,無法保持,並且會變成一場噩夢。我肯定會去一個計時器。
另外,如果您不知道,那麼requestAnimationFrame
函數已針對執行動畫進行了優化,因此您可以使用該函數代替setTimeout
。如果瀏覽器能跟上,它基本上會以60fps的速度調用。
您可以將timestamp
作爲參數傳遞給傳遞給的回調函數,以確定自上次遊戲循環迭代以來經過了多長時間。
相關問題
- 1. 多間隔時間設定
- 2. 設置和清除間隔變成多個間隔
- 3. 設置cron作業的特定時間,然後設置間隔
- 4. 設置CSliderCtrl在10個單位間隔
- 5. Javascript - 設置時間間隔
- 6. 設置間隔隨機+超時
- 7. 一個特定的時間間隔
- 8. 在多個日期間選擇特定的時間戳間隔
- 9. 在python上設置特定的時間間隔
- 10. 在特定時間間隔後獲取當前設備位置
- 11. 在設置的時間間隔內選擇一個特定時間到TimePickerDialog
- 12. Powershell - 應用程序池 - 高級設置 - 常規時間間隔
- 13. jQuery中使用設置間隔時,如何清除間隔?
- 14. 多次設置並清除間隔
- 15. 通知的設置間隔
- 16. JFreeCharts TimeSeriesChart設置域間隔
- 17. 設置間隔和Ajax
- 18. Ionic 2:設置間隔
- 19. 設置UiSlider間隔爲0.5
- 20. MassRensit的UseRetry設置間隔
- 21. jQuery的設置間隔
- 22. 設置間隔爲JQuery的
- 23. RetinaJS的設置間隔
- 24. 設置間隔jQuery中
- 25. 橫幅設置間隔
- 26. jquery中的多個設置的時間間隔衝突
- 27. jQuery淡入淡出divs超過設置的時間間隔
- 28. 在特定的時間間隔
- 29. 在特定的時間間隔
- 30. DSolve爲特定的時間間隔
對,我已經簡要地查看了requestAnimationFrame方法,但從未做過任何事情。我已經開始重新處理操作並添加了框架的遊戲「蜱」。爲了保持代碼在邏輯上是分開的,但是我在其他區域添加了遊戲的「打勾功能」。需要看看這個功能對於我嘗試實現的功能有多好,但現在肯定會+1 – SmokeyPHP
@SmokeyPHP你最終做了什麼?你是否考慮接受答案? – plalx
嗯,自從問這個問題以來,我並沒有做太多的事情,因爲它只是一個小方面的項目,但它看起來像是要解決問題。我已經設置了一種動態添加/刪除流程的方法,以便每個tick/frame運行。每個人都可以指定不同的延遲。看起來確實如此,所以如果問題突然出現,那麼確實會接受並創建一個新問題 - 感謝您的意見 – SmokeyPHP