0

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

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

谢谢

4

1 回答 1

1

我目前正在解决您的问题,但您renderer.readyTexture()只是疯狂地失控,并且本质上是内存泄漏,而且速度很快,这解释了速度下降。

编辑:我让内存使用量稳定下来。

在 render.java 中添加public Map<String, Texture> loadedTextures = new HashMap<String, Texture>();到您的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 的问题,但如果您正确缓存所有内容,它就可以正常工作。

我希望这有帮助。

于 2013-08-04T01:06:24.517 回答