2015-10-06 56 views
0

我目前正在嘗試爲我的遊戲構建一個簡單的加載屏幕,並試圖爲字體獲取皮膚。製作皮膚時,我必須始終有.atlas文件嗎?

當我試圖讓皮膚雖然與skin = game.manager.get("bin/ui/loading.json", Skin.class);,出現此錯誤:

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.GdxRuntimeException: File not found: bin\ui\loadingSkin.atlas (Internal) 
at com.badlogic.gdx.assets.AssetManager.handleTaskError(AssetManager.java:540) 
at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:356) 
at com.badlogic.gdx.assets.AssetManager.finishLoading(AssetManager.java:377) 
at com.Sidescroll.game.LoadingScreen.show(LoadingScreen.java:32) 
at com.badlogic.gdx.Game.setScreen(Game.java:61) 
at com.Sidescroll.game.Sidescroll.create(Sidescroll.java:20) 
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:143) 
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120) 
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: File not found: bin\ui\loadingSkin.atlas (Internal) 
at com.badlogic.gdx.files.FileHandle.read(FileHandle.java:136) 
at com.badlogic.gdx.graphics.g2d.TextureAtlas$TextureAtlasData.<init>(TextureAtlas.java:103) 
at com.badlogic.gdx.assets.loaders.TextureAtlasLoader.getDependencies(TextureAtlasLoader.java:58) 
at com.badlogic.gdx.assets.loaders.TextureAtlasLoader.getDependencies(TextureAtlasLoader.java:34) 
at com.badlogic.gdx.assets.AssetLoadingTask.handleSyncLoader(AssetLoadingTask.java:98) 
at com.badlogic.gdx.assets.AssetLoadingTask.update(AssetLoadingTask.java:87) 
at com.badlogic.gdx.assets.AssetManager.updateTask(AssetManager.java:477) 
at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:354) 
... 6 more 

在我的流動資產/ UI文件夾中有5個文件:

loading_0.png - BitmapFont圖像

loading.fnt - 字體文件

loading.pack - 用於TexturePacker包裝單個圖像

loading.png - TexturePacker圖像

loadingSkin.json - Skin.json,其中BitmapFont和LabelStyle描述

哪裏我試着去使用assetmanager的部分:

//this is the beginning of the show method of my loadingScreen, nothing 
//happened before 

game.manager.load("bin/ui/loading.pack", TextureAtlas.class); 
game.manager.finishLoading(); 
atlas = game.manager.get("bin/ui/loading.pack"); 
// do i need an atlas here ? 
game.manager.load("bin/ui/loadingSkin.json", Skin.class); 
game.manager.finishLoading(); 

skin = game.manager.get("bin/ui/loading.json", Skin.class); 

的問題是,我總是需要一個地圖集?如果是的話,我該如何創建一個,如果沒有,爲什麼會發生錯誤?

編輯:我使用libgdx的版本1.5.4,並沒有機器人在我的項目

回答

1

Skin有許多不同的contructors,如:

Skin() 
    Skin(FileHandle skinFile) 
    Skin(FileHandle skinFile, TextureAtlas atlas) 
    Skin(TextureAtlas atlas) 

如果您使用的是JSON版本的構造函數,你只是將json配置文件傳遞給它。皮膚需要有一些紋理圖集,所以這個選項默認情況下它正在尋找名爲exatcly的.atlas文件,比如json文件。這意味着,當你正在使用的文件名loadingSkin.json

game.manager.load("bin/ui/loadingSkin.json", Skin.class); 

它會尋找loadingSkin.atlas文件,因爲沒有這樣的事它會導致錯誤。

現在你有兩個選擇:

  • 創建一個名爲喜歡你的JSON,但與阿特拉斯擴展文件(.atlas酷似.pack - 你可以改變擴展或創建.atlas文件,而不是的.pack在TexturePacker

    loading.pack -> loading.atlas 
    

    當更改名稱要知道你的質感png格式的文件! (該.pack/.atlas文件中都有自己的名字 - 與編輯器檢查)

  • 使用像皮膚一樣的另一個構造:

    Skin(FileHandle skinFile, TextureAtlas atlas) 
    

    你逝去的文件句柄。肌膚紋理的JSON和TextureAtlas實例

    TextureAtlas atlas = game.manager.get("bin/ui/loading.pack", TextureAtlas.class); 
    
    Skin skin = new Skin(Gdx.files.internal("bin/ui/loadingSkin.json"), atlas); 
    
+0

您:d感謝您的回答,固定它:) – zebleckDAMM

1

此行導致錯誤:

game.manager.load("bin/ui/loadingSkin.json", Skin.class); 

當我看着SkinLoader類的來源我已經看到它加載的文件通過追加。地圖默認:

@Override 
public Skin loadSync (AssetManager manager, String fileName, FileHandle file, SkinParameter parameter) { 
    String textureAtlasPath = file.pathWithoutExtension() + ".atlas"; 
... 

所以好像你需要爲你的皮膚TextureAtlas。您可以通過使用https://libgdx-texturepacker-gui.googlecode.com/files/gdx-texturepacker-3.2.0.zip

您可以創建一個名爲loadingSkin.atlas TextureAtlas並把它下斌\ UI \ loadingSkin.atlas創建TextureAtlas。如果你想創建與另一名地圖集,並告訴使用哪個TextureAtlas裝載機,你可以通過SkinParameter到您的加載方法:

SkinLoader.SkinParameter loadingSkinParameter = new SkinLoader.SkinParameter(); 
loadingSkinParameter.textureAtlasPath = "YOUR_TEXTURE_ATLAS_PATH"; 
game.manager.load("bin/ui/loadingSkin.json", Skin.class, loadingSkinParameter); 
再次