java - 完全删除AndEngine中的场景

标签 java android andengine out-of-memory scene

为了在游戏中的关卡之间切换,我重新创建了 GameScene,但是当我切换关卡大约 3 或 4 次时,我收到 errno 12 内存不足错误。我需要能够以某种方式删除整个场景并阻止它在后台运行。有没有办法做到这一点,这样我就不会耗尽内存?

编辑:

这是我加载新场景的方法。

public void loadGameScene(final Engine mEngine, final SharedPreferences sp, final String map) {
setScene(loadingScene);
ResourcesManager.getInstance().unloadMenuTextures();
mEngine.registerUpdateHandler(new TimerHandler(0.3f,
    new ITimerCallback() {
        public void onTimePassed(final TimerHandler pTimerHandler) {
        ResourcesManager.getInstance().unloadGameTextures();
        mEngine.unregisterUpdateHandler(pTimerHandler);
        ResourcesManager.getInstance().loadGameResources();
        GameScene gameScene = new GameScene();      
        gameScene.setSp(sp);
        gameScene.loadLevel(map);
        gameScene.loadMap(map);
        setScene(gameScene);
        }
    }));
}

我加入了

ResourcesManager.getInstance().unloadGameTextures()

但问题仍然存在。

最佳答案

如果您在调用 ResourcesManager.getInstance().unloadGameTextures() 时正确地在所使用的图集中调用 unload(),则不应得到内存不足错误。

我不知道您的 ResourceManager 的行为方式,但您不需要每次更改场景时都重新创建所有图集(重新创建是指调用 new BitmapAtlas() 或某些变体)。

您的资源管理器应该在游戏开始时创建所有需要的对象(包括 map 集)。然后,当您需要某个场景的区域时,您可以在具有这些区域的图集上调用 atlas.load() ,并在您不需要的其他图集中调用 atlas.unload()不需要。

关于java - 完全删除AndEngine中的场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19346967/

相关文章:

java - 如何比较 java swing 按钮图标以检查相等性?

android - 如何使用 android "Cooliris"画廊加快图像查看速度?

android - Android 中的图像路径

android - 设置不同体型之间的碰撞

java - drools 规则内类变量的条件检查不起作用

java - 有没有办法为相同结构表复制 JPARepository 方法?

java - 获取 'java.security.cert.CertPathValidatorException: timestamp check failed' 但证书未过期并且在其他服务器上工作

javascript - 如何在保证在Android中工作的网页中制作输入类型="file"字段?

android - Qt Creator中Android项目编译报错 "cannot find -lc++"如何解决?

android - 有试用效果的Andengine