帧速率/性能随着时间的推移而下降

时间:2013-08-03 23:34:06

标签: java lwjgl

我正在创建一个简单的宠物模拟器,它是我为作业创建的第一个项目。大多数功能都运行良好,我已经多次重写它,因为我已经更好地设置项目,但是在添加计时器时我遇到了大量的问题。

运行项目后,我的游戏似乎工作正常,图像正在渲染(也许不是最有效),我的计时器/ 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

由于

1 个答案:

答案 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或包含的Texturenull,我们会加载纹理,并将其存储在地图中。如果存储了纹理,我们将其从Map中拉出并绑定它。

之前,你每次都在加载图像,垃圾收集器删除它,这可能是Slick的一个问题,但是如果你正确地缓存了一切,它就可以了。

我希望这会有所帮助。