2015-01-27 3 views
1

Извините за беспокойство, я знаю, что это уже было задано, но я не могу его исправить. Я начал работать с libgdx и решил приобрести книгу в качестве учебника - «Изучение развития игры LigbGDX». Все было хорошо, пока глава 4, я не могу загрузить активы в canyonbunny.pack. Я не знаю, что происходит. В файле ../CanyonBunny-android/assets/images создаются два файла: один - png, другой - атлас. Если бы вы могли дать мне руку, меня бы больше всего приветствовали.libgdx loading asset, texture packer

DesktopLauncher.java 

package com.packtub.libgdx.canyonbunny.desktop; 

import com.badlogic.gdx.backends.lwjgl.LwjglApplication; 
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; 
import com.packtub.libgdx.canyonbunny.CanyonBunnyMain; 
import com.badlogic.gdx.tools.texturepacker.TexturePacker; 
import com.badlogic.gdx.tools.texturepacker.TexturePacker.Settings; 


public class DesktopLauncher { 
    private static boolean rebuildAtlas = true; 
    private static boolean drawDebugOutline = true; 

    public static void main (String[] args) { 
     if (rebuildAtlas){ 
      Settings settings = new Settings(); 
      settings.maxWidth = 1024; 
      settings.maxHeight = 1024; 
      settings.debug = drawDebugOutline; 
      TexturePacker.process(settings, "assets-raw/images", 
        "..CanyonBunny-android/assets/images", 
        "canyonbunny.pack"); 
     } 

     LwjglApplicationConfiguration config = new LwjglApplicationConfiguration(); 

     config.title = "CanyonBunny"; 
     config.useGL30 = false; 
     config.width = 800; 
     config.height = 480; 
     new LwjglApplication(new CanyonBunnyMain(), config); 
    } 
} 

Assets.java 

package com.packtub.libgdx.canyonbunny.game; 

import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.assets.AssetDescriptor; 
import com.badlogic.gdx.assets.AssetErrorListener; 
import com.badlogic.gdx.assets.AssetManager; 
import com.badlogic.gdx.graphics.g2d.TextureAtlas; 
import com.badlogic.gdx.utils.Disposable; 
import com.packtub.libgdx.canyonbunny.util.Constants; 
import com.badlogic.gdx.graphics.g2d.TextureAtlas.AtlasRegion; 
import com.badlogic.gdx.graphics.Texture; 
import com.badlogic.gdx.graphics.Texture.TextureFilter; 

public class Assets implements Disposable, AssetErrorListener{ 
    public static final String TAG = Assets.class.getName(); 
    public static final Assets instance = new Assets(); 
    private AssetManager assetManager; 

    //singleton: previene de inicializaciones desde otras clases 
    private Assets() {} 

    public AssetBunny bunny; 
    public AssetRock rock; 
    public AssetGoldCoin goldCoin; 
    public AssetFeather feather; 
    public AssetLevelDecoration levelDecoration; 

    public void init (AssetManager assetManager){ 
     this.assetManager = assetManager; 
     //Se establece el asset manager que maneja los errores 
     assetManager.setErrorListener(this); 
     //Carga las texturas atlas 
     assetManager.load(Constants.TEXTURE_ATLAS_OBJECTS, TextureAtlas.class); 
     //Se inicia a cargar los assets y se espera que termine 
     assetManager.finishLoading(); 
     Gdx.app.debug(TAG, "# de assets cargados: " 
     + assetManager.getAssetNames().size); 
     for (String a : assetManager.getAssetNames()) Gdx.app.debug(TAG, "asset: " + a); 

     TextureAtlas atlas = assetManager.get(Constants.TEXTURE_ATLAS_OBJECTS); 

     //activa la opcion "texture filtering" para una dibujado mas suave de los pixeles 
     for (Texture t : atlas.getTextures()) t.setFilter(TextureFilter.Linear, TextureFilter.Linear); 

     //Crea los objetos del juego 
     bunny = new AssetBunny(atlas); 
     rock = new AssetRock(atlas); 
     goldCoin = new AssetGoldCoin(atlas); 
     feather = new AssetFeather(atlas); 
     levelDecoration = new AssetLevelDecoration(atlas); 
    } 

    @Override 
    public void dispose(){ 
     assetManager.dispose(); 
    } 

    @Override 
    public void error(AssetDescriptor asset, Throwable throwable) { 
     Gdx.app.error(TAG, "No se pudo cargar el asset '" + asset + "'", (Exception)throwable); 

    } 

    //public void error(String filename, Class type, Throwable throwable){ 
     //Gdx.app.error(TAG, "No se pudo cargar el asset '" + filename + "'", (Exception)throwable); 

    //} 

    public class AssetBunny { 
     public final AtlasRegion head; 
     public AssetBunny (TextureAtlas atlas){ 
      head = atlas.findRegion("bunny_head"); 
     } 
    } 

    public class AssetRock { 
     public final AtlasRegion edge; 
     public final AtlasRegion middle; 
     public AssetRock(TextureAtlas atlas){ 
      edge = atlas.findRegion("rock_edge"); 
      middle = atlas.findRegion("rock_middle"); 
     } 
    } 

    public class AssetGoldCoin { 
     public final AtlasRegion goldCoin; 
     public AssetGoldCoin(TextureAtlas atlas){ 
      goldCoin = atlas.findRegion("item_gold_coin"); 
     } 
    } 

    public class AssetFeather{ 
     public final AtlasRegion feather; 
     public AssetFeather(TextureAtlas atlas){ 
      feather = atlas.findRegion("item_feather"); 
     } 
    } 

    public class AssetLevelDecoration{ 
     public final AtlasRegion cloud01; 
     public final AtlasRegion cloud02; 
     public final AtlasRegion cloud03; 
     public final AtlasRegion mountainLeft; 
     public final AtlasRegion mountainRight; 
     public final AtlasRegion waterOverlay; 

     public AssetLevelDecoration(TextureAtlas atlas){ 
      cloud01 = atlas.findRegion("cloud01"); 
      cloud02 = atlas.findRegion("cloud02"); 
      cloud03 = atlas.findRegion("cloud03"); 
      mountainLeft = atlas.findRegion("mountain_left"); 
      mountainRight = atlas.findRegion("mountain_right"); 
      waterOverlay = atlas.findRegion("water_overlay"); 
     } 
    } 




} 

консоль

изображения упаковки ......... Запись 1024х1024: ..CanyonBunny-андроид \ активы \ образы \ canyonbunny.pack.png com.packtub.libgdx .canyonbunny.game.Assets: Нет se pudo cargar el asset 'images/canyonbunny.pack, com.badlogic.gdx.graphics.g2d.TextureAtlas' com.badlogic.gdx.utils.GdxRuntimeException: Файл не найден: изображений \ canyonbunny.pack (Внутренний) на com.badlogic.gdx.files.FileHandle.read (FileHandle.java:136) наcom.badlogic.gdx.graphics.g2d.TextureAtlas $ TextureAtlasData. (TextureAtlas.java:103) на com.badlogic.gdx.assets.loaders.TextureAtlasLoader.getDependencies (TextureAtlasLoader.java:58) в ком. badlogic.gdx.assets.loaders.TextureAtlasLoader.getDependencies (TextureAtlasLoader.java:34) на com.badlogic.gdx.assets.AssetLoadingTask.handleSyncLoader (AssetLoadingTask.java:98) на com.badlogic.gdx.assets. AssetLoadingTask.update (AssetLoadingTask.java:87) at com.badlogic.gdx.assets.AssetManager.updateTask (AssetManager.java:466) at com.badlogic.gdx.assets.AssetManager.update (AssetManager.java:354) при com.badlogic.gdx.assets.AssetManager.finishLoading (AssetManager.java:377) в com.packtub.libgdx.canyonbunny.game.Assets.init (Assets.java:35) на com.packtub. libgdx.canyonbunny.CanyonBunnyMain.create (CanyonBunnyMain.java:25) на com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop (LwjglApplication.java:137) на com.badlogic.gdx.backends.lwjgl. LwjglApplication $ 1.run (LwjglApplication.java:114) com.packtub.libgdx.canyonbunny.game.Assets: # де активы Каргадос: 0 Исключение в потоке "LWJGL Применение" com.badlogic.gdx.utils.GdxRuntimeException: актива не загружен: images/canyonbunny.pack at com.badlogic.gdx.assets.AssetManager.get (AssetManager.java:110) в com.packtub.libgdx.canyonbunny.game.Assets.init (Assets.java:40) в com.packtub.libgdx.canyonbunny .CanyonBunnyMain.create (CanyonBunnyMain.java:25) на com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop (LwjglApplication.java:137) на com.badlogic.gdx.backends.lwjgl.LwjglApplication $ 1. (LwjglApplication.java:114)

ответ

2

TexturePacker автоматически устанавливает расширение, определяемое параметрами settings.atlasExtension (".atlas").

Измените это значение или измените значение параметра Constants.TEXTURE_ATLAS_OBJECTS на "canyonbunny.pack.atlas".

+0

Большое спасибо, с вашей помощью мне удалось заставить его работать. – user3042518

0

Установите параметр atlasExtension в положение "".

if (rebuildAtlas) { 
      Settings settings = new Settings(); 
      settings.maxWidth = 1024; 
      settings.maxHeight = 1024; 
      settings.duplicatePadding = false; 
      settings.atlasExtension=""; 
... 
}