问题描述
当我尝试在android上加载某些图像时,我因错误而崩溃
FATAL EXCEPTION: GLThread 50638
Process: com.greenpipestudios.seedpeople, PID: 28277
com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load file: gui/up.png
at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:140)
at com.badlogic.gdx.graphics.TextureData$Factory.loadFromFile(TextureData.java:98)
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:100)
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:92)
at com.greenpipestudios.seedpeople.ResourceManager.loadGuiImages(ResourceManager.java:188)
我正在通过ResourceManager.java
模块加载所有图像。
通过此方法加载的精灵的所有图像都可以正常工作:
public void loadImages(int sprite_id){
try{
if(images.get(sprite_id) != null)return;
}catch(NullPointerException e){
return;
}
int imwidth = dimensions.get(sprite_id)[0];
int imheight = dimensions.get(sprite_id)[1];;
int[] numFrames = frameCounts.get(sprite_id);
int numSprites = numFrames.length;
ArrayList<TextureRegion[]> sprites = new ArrayList<TextureRegion[]>();
try {
Texture spritesheet = new Texture(Gdx.files.internal(imgpaths.get(sprite_id)));
TextureRegion[][] sheet = TextureRegion.split(spritesheet,imwidth,imheight);
for(int i = 0; i < numSprites; i++){
TextureRegion[] sprite = new TextureRegion[frameCounts.get(sprite_id)[i]];
for(int j = 0; j < frameCounts.get(sprite_id)[i]; j++){
sheet[i][j].flip(false, true);
sprite[j] = sheet[i][j];
}
sprites.add(sprite);
}
images.set(sprite_id, sprites);
} catch (Exception e) {
e.printStackTrace();
}
}
该行Texture spritesheet = new Texture(Gdx.files.internal(imgpaths.get(sprite_id)));
在Android和台式机上都可以正常加载。
imgpaths.get(sprite_id)
返回一个字符串,例如"sprites/player.png"
。
以下方法在android上的指定行上崩溃,但在桌面上可以正常运行:
btnUp = new TextureRegion(new Texture(Gdx.files.local("gui/up.png")));
public void loadGuiImages(){
btnUp = new TextureRegion(new Texture(Gdx.files.local("gui/up.png")));
btnAction = new TextureRegion(new Texture(Gdx.files.local("gui/action.png")));
btnPause = new TextureRegion(new Texture(Gdx.files.local("gui/pause.png")));
}
如您所见,Texture构造函数Texture(FileHandle f)被类似的参数调用,但在一个实例中崩溃,而在另一个实例中崩溃。
注意:我测试了单独加载纹理(不在TextureRegion构造函数内部),但仍然遇到相同的错误。 同样,图像是二维幂的,但甚至不必是二维的。
1楼
您说Gdx.files.internal方法可在台式机和android上运行,但Gdx.files.local不适用于android。 您在Android上的Gdx.files.local调用可以工作的代码的任何部分吗?
我认为内部是资产应存放的地方,本地是指较小的文件(例如,游戏状态)。
不同的操作系统对内部/本地位置的处理略有不同。 这可能就是为什么事情在桌面而不是在android上“起作用”的原因。 您交换的Gdx.files调用可能会将您指向不同的地方。