AndEngine GLES 2.0 - 电源按钮问题 - 游戏未恢复解锁屏幕后

时间:2013-09-17 13:41:40

标签: android andengine

我正在使用AndEngine GLES 2.0开发一款安卓游戏。我的一些用户面临这样的问题:锁定/解锁设备后或按下主页按钮后恢复游戏不能完全工作意味着游戏在解锁屏幕后挂起。我的意思是在调用onResume和onPause之后会发生这种情况。

我的onPause代码是

@Override
protected void onPause() {
    super.onPause();
    this.mEngine.stop();
    this.getSManager().stop(Sounds.SPIN);
    dbHelper.close();
}

onResuam代码是:

@Override
protected void onResume() 
{

 if (this.mEngine.isRunning()) 
    {
        this.getSManager().stop(Sounds.SPIN);
        this.mEngine.stop();
    }
    else 
    {
        this.mEngine.start();
    }

}

任何有此想法的人?请为此问题提出一些解决方案。

2 个答案:

答案 0 :(得分:7)

尝试添加

android:configChanges="orientation|screenLayout|keyboardHidden|screenSize"

到您的主要活动。

另外:确保你的纹理都不是静态变量。不知道为什么,但是使用静态变量纹理可以恢复引擎。

答案 1 :(得分:1)

我遇到了类似的问题,我通过重新加载所有纹理来解决这个问题。 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中调用方法onResume

@Override
protected synchronized void onResume() {
    TextureCache.clear();
    super.onResume();
}