我有一个类似的问题,我通过在 Activity 的OnResume
方法中重新加载所有纹理和字体来修复它。
编辑回答整形外科医生:
我有一个TextureCache
缓存纹理的类。它工作正常,但在应用程序恢复时,所有纹理都会变成黑色。正如您所说,这似乎是静态变量的问题。我添加了一个clear
清除静态数据的方法,并在应用程序恢复时调用它。
这是我的课:
public class TextureCache {
private static Map<String, ITextureRegion> textures = new HashMap<String, ITextureRegion>();
private static Context ctx;
private static TextureManager tm;
public static void clear() {
textures.clear();
}
public static void init(Context pCtx, TextureManager pTm) {
ctx = pCtx;
tm = pTm;
}
public static ITextureRegion getTexture(String name) {
ITextureRegion texture = textures.get(name);
if (texture == null) {
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inJustDecodeBounds = true;
try {
InputStream in = ctx.getResources().getAssets().open("gfx/" + name);
BitmapFactory.decodeStream(in, null, opt);
} catch (IOException e) {
Log.e("TextureCache", "Could not load texture [" + name + "]", e);
}
BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
BitmapTextureAtlas texAtlas = new BitmapTextureAtlas(tm, opt.outWidth, opt.outHeight, TextureOptions.DEFAULT);
texture = BitmapTextureAtlasTextureRegionFactory.createFromAsset(texAtlas, ctx, name, 0, 0);
texture1.load();
textures.put(name, texture);
}
return texture;
}
}
clear
我在 Activity 中调用该方法onResume
:
@Override
protected synchronized void onResume() {
TextureCache.clear();
super.onResume();
}