我有一個或多或少完成的Java遊戲。敵人從屏幕的頂部產生,並與屏幕底部的單位戰鬥。遊戲耗用了大量的CPU,我認爲這部分是因爲每次敵人產生時,它都會有一個線程。當它死亡時,敵人的記憶空間不會被刪除,線程也不會被銷燬。我要問的是,會否刪除敵人提高效率,如果是這樣,怎麼樣?另外,你們有沒有其他方法可以提高效率?編程效率
編程效率
回答
你需要的是一個profiler。
您需要摒棄爲什麼程序運行緩慢的猜測。你最終可能會浪費大量的時間來清理線程分配,結果發現它並不是性能瓶頸。
Java中有不同的分析器,您最終使用的分析器可能取決於您的編程環境。就我個人而言,我使用Netbeans IDE進行開發,我會推薦使用它,它具有良好的profiler。如果您開發使用Eclipse IDE,有VisualVM和更多的選擇看這個問題:
https://stackoverflow.com/questions/2713940/eclipse-java-profiler
謝謝,我將使用NBeans分析器。 – Jimmt
好,遊戲通常不會使用這些方法開發!
你需要做的第一件事是擺脫你創建和銷燬的所有線程,在遊戲中我們通常只有一個活動線程。我知道,使用多核CPU的全部功能是非常好的,但這對專家來說是很好的。作爲獨立開發者,我知道我的遊戲需要運行的性能,所以我只使用線程來阻止呼叫。比如等待網絡數據包到達。
現在知道你只需要一個活動的線程,這裏是遊戲通常會做的!
- 檢查用戶輸入
- 更新場景
- 渲染幀
而遊戲循環通過相同的週期反覆。請注意,許多顯示器不刷新頻率高於60Hz,如果他們這樣做,我不知道任何人都可以真正注意到!因此,以超過60fps的速度渲染遊戲只會浪費處理能力。檢查用戶輸入並更新場景也是一樣。如果用戶沒有從遊戲中獲得任何新的數據,他就無法迴應;所以檢查輸入並沒有真正改變! 「更新場景」部分也是一樣的。如果用戶沒有做任何新的事情,我們也不會畫任何東西,爲什麼我們關心世界上發生的事情?我們可以讓所有更改堆積起來,然後將其應用於一個重大更新中。在這裏,我正在談論一個通常在所有遊戲中實施的fps限制,以防止濫用計算能力。無論是CPU還是GPU,計算量過大都會導致更高的功耗,而移動設備或筆記本電腦用戶無法獲得回報!
你提到過你的遊戲中有一些AI。正如你所猜測的,任何與遊戲互動的東西都有兩個明顯的步驟!
- 觀察遊戲狀態
- 拍動作
我們可以收拾了整個事情了在think()
方法。考慮到這些呼叫並不會消耗太多時間,我們可以將它們稱爲遊戲中所有非人類思維的事物,並且進行這些呼叫的最佳位置是當您檢查用戶輸入時。至少他們可以被認爲是用戶,除了電腦是爲他們所認爲的,他們註定要被熟練的玩家毆打!這些所謂的AI代理商是否需要溝通並不重要。讓他們儘可能多地彼此交談,但只在他們觀察比賽的時候。
由於蒂姆建議使用配置文件是一件好事,找到你的遊戲的瓶頸。但它可能總是有用的。有時你會發現你的代碼的一部分出現了問題,它的執行效果很好。在這些情況下不要嚇壞了!如果你遇到這種情況,你可以每2或3幀做一次這些東西;這沒什麼大不了的!只需檢查遊戲是否完美運行即可。
最後一個提示:記住你正在開發一款遊戲。如果由於某種原因要實現彈簧,則不需要像在物理模擬中那樣計算力和速度,但一個簡單的sin
函數就可以實現這個功能!而這些技巧有時比實際驗證的方法更好。在遊戲中,用戶喜歡看到最好的結果,但幾乎沒有人關心是否所有內容都按照牛頓的規定實施!
- 1. 編程設計效率
- 2. 異步編程,線程和效率
- 3. 編碼效率VS執行效率
- 4. Ocaml程序編寫語法效率
- 5. 寫作效率簡單隨機編程
- 6. 強制編程和函數式編程的效率
- 7. 使用Java編寫效率更高效
- 8. 算法效率vs效率
- 9. 效率在多線程
- 10. 多進程效率低下
- 11. Xamarin Forms - 線程效率
- 12. 在MONO中編寫的程序效率與.net框架上的程序效率相當
- 13. 執行效率與程序員效率R
- 14. PHP編碼約定和效率
- 15. C++:編寫頭文件,它提高程序的效率
- 16. 函數式編程:一成不變的數據結構效率
- 17. iOS效率文件節省效率
- 18. 你使用什麼工具來提高編碼效率和整體效率
- 19. 高效編程
- 20. Scala中的概率編程
- 21. 您使用哪些編碼工具來提高FLEX中的編程效率?
- 22. Android編碼更有效率和更有效
- 23. 效率問題
- 24. 讀寫效率
- 25. LINQ c#效率
- 26. 效率System.Linq.Enumerable.Any()
- 27. 序言:效率
- 28. 效率MATLAB
- 29. UIWebKit無效率
- 30. 效率Source.fromFile
可以顯示我們的小代碼片段?爲什麼在敵人死亡後線不停止? – aayoubi
「提高效率的其他方法」完全取決於您如何編寫遊戲代碼。沒有太多可以做的超級常規優化。有一些[設置](http://www.caucho.com/resin-3.0/performance/jvm-tuning.xtp),如果內存或堆棧限制是問題,您可以在客戶端進行更改(但它們不應該「 t be)。 – darvids0n
我們沒有什麼可以繼續下去的。 –