2014-12-01 48 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(); 

在你的遊戲類渲染方法。否則,當前屏幕的渲染()將不會被調用