我正在创建一个简单的宠物模拟器,它是我为作业创建的第一个项目。大多数功能都运行良好,我已经多次重写它,因为我已经更好地设置项目,但是在添加计时器时我遇到了大量的问题。
运行项目后,我的游戏似乎工作正常,图像正在渲染(也许不是最有效),我的计时器/ 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
由于
答案 0 :(得分:1)
我目前正在处理修复你的问题,但你的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
,如果确实如此,我会检查它是否为空。如果条目不在Map
或包含的Texture
为null
,我们会加载纹理,并将其存储在地图中。如果存储了纹理,我们将其从Map
中拉出并绑定它。
之前,你每次都在加载图像,垃圾收集器不删除它,这可能是Slick的一个问题,但是如果你正确地缓存了一切,它就可以了。
我希望这会有所帮助。