2014-12-01 32 views
1

我正在创建一个libgdx游戏,它工作正常,完美加载所有资源等。然后我试图执行libgdx的Asset Manager'来添加一个活动的加载屏幕等。这是我的比赛将采取年龄在桌面加载,保持黑屏,几乎崩溃,然后终于崩溃,并在我的财产我不停收到错误或类似:资产管理器加载pixmap out of mem Libgdx Java

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(); 
    } 
} 
+0

没有您展示您如何实际加载资源,我们很难为您提供帮助。我们需要它的代码。 – noone 2014-12-02 04:57:08

+0

@noone请参阅编辑 – useruseruser 2014-12-03 19:07:20

+0

另请注意,对于移动设备,不应将“AssetManager”设置为静态。这是在粗体文本**谨慎**下[这里](https://github.com/libgdx/libgdx/wiki/Managing-your-assets#creating-an-assetmanager)所涵盖的内容。 – Charanor 2016-08-24 16:32:20

回答

1

每一帧都会调用Game1的渲染方法,所以您在每一帧都创建一个新的屏幕,并且屏幕在每个演出调用中都会创建一个新的纹理实例,最终会导致内存不足。

另外,不要忘了添加

super.render(); 

在你的游戏类渲染方法。否则,当前屏幕的渲染()将不会被调用