2015-01-27 5 views
1

죄송합니다. 이미 질문을 받았지만 문제를 해결할 수 없습니다. 나는 libgdx로 작업하기 시작했으며 튜토리얼 - LigbGDX 게임 개발 학습 "으로 책을 갖기로 결정했습니다. 제 4 장까지는 모두 괜찮 았고, 자산을 canyonbunny.pack에 적재 할 수 없었습니다. 나는 무슨 일이 일어나고 있는지 모른다. ../CanyonBunny-android/assets/images에 두 개의 파일이 생성됩니다. 하나는 png이고 다른 하나는 atlas입니다. 네가 나에게 손을 줄 수 있다면 나는 가장 환영받을 것이다.libgdx 로딩 애셋, 텍스처 패커

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 : 아니요 푸드 카가 엘 자산 '이미지/canyonbunny.pack, com.badlogic.gdx.graphics.g2d.TextureAtlas' com.badlogic.gdx.utils.GdxRuntimeException : 파일을 찾을 수 없음 : images \ canyonbunny.pack (내부) com.badlogic.gdx.files.FileHandle.read (FileHandle.java:136) atcom.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.packtub에서 com.packtub.libgdx.canyonbunny.game.Assets.init에서 com.badlogic.gdx.assets.AssetManager.finishLoading (AssetManager.java:377) (Assets.java:35) 에서 0. libgdx.canyonbunny.CanyonBunnyMain.create com.badlogic.gdx.backends.lwjgl에서 com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop (LwjglApplication.java:137) 에서 (CanyonBunnyMain.java:25). LWJglApplication $ 1.run (LwjglApplication.java:114) com.packtub.libgdx.canyonbunny.game.Assets : # de assets cargados : 0 스레드 "LWJGL 응용 프로그램"의 예외 com.badlogic.gdx.utils.GdxRuntimeException : 자산 로드되지 않음 : images/canyonbunny.pack at com.badlogic.gdx.assets.AssetManager.get (AssetManager.java:110) at com.packtub.libgdx.canyonbunny.game.Assets.init (Assets.java:40) com.packtub.libgdx.canyonbunny .CanyonBunnyMain.create com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop (LwjglApplication.java:137)에서 (CanyonBunnyMain.java:25) 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=""; 
... 
}