GdxRuntimeException:读取文件时出错

时间:2014-07-29 09:48:55

标签: java android libgdx

我正在使用libgdx学习和编写Android游戏,我已经在很长一段时间内遇到了这个错误。我附上了以下内容

  1. 代码。
  2. 我用来访问资产的命令。
  3. 在我调试android上的代码时包含错误的屏幕截图。
  4. 我的Package Explorer的屏幕截图。
  5. 我试图让代码正常工作的所有可能组合。
  6. 1.守则

    package com.me.mygdxgame;
    
    import com.badlogic.gdx.Gdx;  
    import com.badlogic.gdx.assets.AssetErrorListener;  
    import com.badlogic.gdx.assets.AssetManager;  
    import com.badlogic.gdx.graphics.Texture;  
    import com.badlogic.gdx.graphics.Texture.TextureFilter;    
    import com.badlogic.gdx.graphics.g2d.TextureAtlas;  
    import com.badlogic.gdx.utils.Disposable;
    
    public class Gameassetloader implements Disposable, AssetErrorListener {
    
    public static final String TAG = Gameassetloader.class.getName();
    public static Gameassetloader instance = new Gameassetloader();
    private AssetManager assetManager;
    
    /** Load the appropriate texture for the respective entities **/
    public AssetCharacter boy;
    public AssetRock rock;
    public AssetShield shield;
    
    /** singleton: prevent instantiation from other classes **/
    
    private Gameassetloader(){}
    public void init(AssetManager assetManager)
     {
        this.assetManager = assetManager;
    
        //set asset manager error handler
        assetManager.setErrorListener(this);
    
        //load texture atlas
        assetManager.load(Gameconstants.TEXTURE_ATLAS_OBJECTS,TextureAtlas.class);
    
        //start loading assets and wait until finished
        assetManager.finishLoading();
    
        Gdx.app.debug(TAG, "# of assets loaded:" + assetManager.getAssetNames().size);
    
        for (String a : assetManager.getAssetNames())
            Gdx.app.debug(TAG, "asset:" + a);
    
        TextureAtlas atlas = assetManager.get(Gameconstants.TEXTURE_ATLAS_OBJECTS);
    
        //enable texture filtering for pixel smoothing
        for(Texture t : atlas.getTextures())
            t.setFilter(TextureFilter.Linear,TextureFilter.Linear);
    
        //create game resource objects
    
        boy = new AssetCharacter(atlas);
        rock = new AssetRock(atlas);
        shield = new AssetShield(atlas);
    }
    
    public void dispose() { assetManager.dispose(); }
    
    
     @Override
     public void error(String fileName, Class type, Throwable throwable) 
      {
        Gdx.app.error(TAG, "Couldn't load asset' " + fileName + "'", (Exception)throwable); 
      }
    
    }  
    

    2.The Command

     public static final String TEXTURE_ATLAS_OBJECTS ="gdxgame-android/assets/packed/packed.png";
    

    3. Package Explorer的截图 http://i1294.photobucket.com/albums/b608/Abhishek_M369/PackageExplorer_zpsd2589ee2.jpg

    4.错误日志的屏幕截图(Android DDMS) http://i1294.photobucket.com/albums/b608/Abhishek_M369/ErrorLog_zps8a4a68d9.jpg

    5.我试过的所有可能组合

     "/gdxgame-android/assets/packed/packed.png";
     "gdxgame-android/assets/packed/packed.png";
     "/assets/packed/packed.png";
     "assets/packed/packed.png";
     "/packed/packed.png";
     "packed/packed.png";
     "/packed.png";
     "packed.png";
    
     public static FileHandle location = Gdx.files.internal("assets/packed.png");
     public static final TEXTURE_ATLAS_OBJECT = location.toString();
    
     //this caused shutdown of emulator
     public static FileHandle location = Gdx.files.internal("assets/packed.png");
     public static final TEXTURE_ATLAS_OBJECT = location.readString();
    
     // I even tried setting the build path of the asset folder as source folder
     // Also tried placing the image in the data folder.
     // Tried using the absolute path too , i.e Gdx.files.absolute("the absolute");
     // Tried passing the absolute path directly as string
    

    似乎没有什么对我有用。

1 个答案:

答案 0 :(得分:1)

问题很简单,问题在于不同版本的libgdx和文档。下面解释的答案仅仅是对libgdx版本0.9.8的确认。

(注意:使用Texturepacker GUI来打包纹理&&&而不是libgdx库中的方法)

首先是" assetManager"必须提供一个包含图像坐标的文件,这是一个错误,因为我正在提供打包图像。

GL20应该能够解析 NPOT 图像,但它无法解析,原因仍然未知,所以我必须将纹理打包到 POT ,这是通过在GUI中选择POT选项来完成。执行此操作后,我可以使用以下代码轻松加载新的POT图像

/**Mention only the folder/file under the asset dir**/

public class Gameconstants { public static final String location = "packed/packed.txt" }

/**access the same using the following command**/

private AssetManager assetManager;
assetManager.load(Gameconstants.location,Texture.class);

这个答案可能不是很有说服力,但它确实解决了我的问题。

感谢所有帮助过的人:)