Asset Manager 从 mem Libgdx Java 中加载 pixmap



我正在创建一个libgdx游戏,它运行良好,完美加载了所有资产等。但是,我随后尝试实现libgdx的Asset Manager'以添加活动的加载屏幕等。但是这样做后,我的游戏需要很长时间才能在桌面上加载,保持黑屏,几乎崩溃然后最终崩溃,在我的资产上,我不断收到错误或类似错误:

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load 
    file: data/startBackground.png
        at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:140)
        at com.badlogic.gdx.graphics.glutils.FileTextureData.prepare(FileTextureData.java:64)
        at com.badlogic.gdx.graphics.Texture.load(Texture.java:130)
        at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:121)
        at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:100)
        at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:92)
        at com.MKgames.game1.screen.MainMenuScreen.show(MainMenuScreen.java:98)
        at com.badlogic.gdx.Game.setScreen(Game.java:61)
        at com.MKgames.Game1.render(Game1.java:41)
        at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:206)
        at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114)
    Caused by: java.io.IOException: couldn't load pixmap outofmem
        at com.badlogic.gdx.graphics.g2d.Gdx2DPixmap.<init>(Gdx2DPixmap.java:57)
        at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:138)
        ... 10 more

然后我尝试删除我的资产类,同样的事情不断发生。

data/startBackground.png是 1920*1080 .png图像。

我有一种感觉,与游戏本身相比,在计算机上运行它可能是一个问题?

以下是在没有资源管理器的情况下正常加载资产的方式(在我尝试实现资源管理器之前,这曾经有效,但现在一旦我删除资源管理器就不工作了)

public void show() {
        Texture backgroundTexture = new Texture(Gdx.files.internal("data/startBackground.png"));
        background =  new Sprite (backgroundTexture);
}

以下是我如何使用资源管理器加载此资产:

public class Game1 extends Game{
public void render() {
        if(Assets.update()){
            this.setScreen(new MainMenuScreen(this));
        }
    }
}

public class Assets {
    public static AssetManager manager = new AssetManager();
    public static void queueLoading() {
        (..)
        manager.load("data/startBackground.png",Texture.class);
        (..)
    }
    public static boolean update() {
        return manager.update();
    }
}

Game1 渲染方法每帧调用一次,因此您在每一帧上创建一个新屏幕,并且屏幕在每次显示调用中创建新的纹理实例,您最终会耗尽内存。

另外,不要忘记添加

super.render();

在游戏类呈现方法中。否则,将不会调用当前屏幕的 render()

最新更新