2015-10-06 3 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 

В моих текущих активов папки/щ 5 файлов:

loading_0.png - BitmapFont изображение

loading.fnt - файл шрифта

loading.pack - используется TexturePacker для упаковки одного изображения

loading.png - TexturePacker изображение

loadingSkin.json - Skin.json, где BitmapFont и LabelStyle описывается

часть, где Im пытается использовать 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); 

вопрос, мне всегда нужен атлас? если да, то как мне его создать, если нет, то почему возникает ошибка?

EDIT: Я использую релиз 1.5.4 libgdx и не андроида в моем проекте

ответ

1

Skin имеет много различных contructors как:

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

Если вы используете версию JSON конструктора вы просто передаете ему файл конфигурации json. Кожа должна иметь некоторый текстурный атлас, поэтому с этой опцией по умолчанию он ищет файл .atlas с именем exatcly как 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 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 источник класса я видел, что он загружает файл путем добавления .atlas по умолчанию:

@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 и поставить его под Bin \ щ \ loadingSkin.atlas. Если вы хотите создать атлас с другим именем и скажите загрузчик, который текстурный атлас использовать, вы можете передать SkinParameter в ваш метод загрузки:

SkinLoader.SkinParameter loadingSkinParameter = new SkinLoader.SkinParameter(); 
loadingSkinParameter.textureAtlasPath = "YOUR_TEXTURE_ATLAS_PATH"; 
game.manager.load("bin/ui/loadingSkin.json", Skin.class, loadingSkinParameter); 
Смежные вопросы