[英]Frame-Rate / Performance drops over time
我正在創建一個簡單的寵物模擬器,這是我為任務創建的第一個項目。 大部分功能都可以正常工作,由於我在制定項目方面做得更好,因此我對其進行了很多次重寫,但是在添加計時器時卻遇到了麻煩。
運行該項目后,我的游戲似乎運行良好,正在渲染圖像(也許不是最有效的),並且我的計時器/ FPS計數器運行良好。 但是,自從我添加了此計時/ FPS代碼以來,它在FPS中的運行速度越來越慢,然后凍結並崩潰。
我遵循了Ninja Cave的LWJGL時序教程。 http://ninjacave.com/lwjglbasics4
這是我的源代碼,並非包括所有類,因為有很多類,但是如果需要的話也可以。 我試着只包括針對渲染的內容。
主類http://pastebin.com/BpkHHnnj
渲染類http://pastebin.com/QtJeYw1a
紋理加載程序類http://pastebin.com/RX5iDXQm
主要游戲狀態類http://pastebin.com/pvgDLkeM
寵物課http://pastebin.com/VF6cq9S4
謝謝
我目前正在解決您的問題,但是您的renderer.readyTexture()
突然失控了,本質上是在浪費內存,而且速度很快 ,這說明速度下降。
編輯 :我得到穩定的內存使用情況。
添加public Map<String, Texture> loadedTextures = new HashMap<String, Texture>();
到render.java中的renderer
類,並將renderer.readyTexture()
方法更改為此:
public void readyTexture(String textureDir){
if (!loadedTextures.containsKey(textureDir) || loadedTextures.get(textureDir) == null) {
texture = lt.loadTexture(textureDir);
loadedTextures.put(textureDir, texture);
} else {
texture = loadedTextures.get(textureDir);
}
textureDirString = textureDir;
texture.bind();
texLoaded = true;
System.out.println("Loaded: " + textureDirString);
}
現在有了代碼, Map/HashMap
將存儲已加載的紋理。 在renderer.readyTexture()
方法中,我讓它檢查Map
是否不包含關鍵的textureDir
,如果存在,則檢查其是否為null。 如果該條目不在Map
或包含的Texture
為null
,則我們加載紋理並將其存儲在Map中。 如果存儲了紋理,則將其從Map
拉出並綁定。
以前,您每次都加載圖像,而垃圾收集器沒有刪除它,這可能是Slick的問題,但是如果正確緩存所有內容,它就可以正常工作。
我希望這有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.