为了在游戏中的关卡之间切换,我重新创建了 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/