Merge pull request #3682 from kevlahnota/newmaster2

dispose box2dWorld
This commit is contained in:
kevlahnota
2023-08-23 19:42:54 +08:00
committed by GitHub
2 changed files with 20 additions and 1 deletions

View File

@@ -19,6 +19,7 @@ import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Clipboard; import com.badlogic.gdx.utils.Clipboard;
import forge.adventure.scene.*; import forge.adventure.scene.*;
import forge.adventure.stage.GameHUD; import forge.adventure.stage.GameHUD;
import forge.adventure.stage.MapStage;
import forge.adventure.util.Config; import forge.adventure.util.Config;
import forge.adventure.world.WorldSave; import forge.adventure.world.WorldSave;
import forge.animation.ForgeAnimation; import forge.animation.ForgeAnimation;
@@ -1016,6 +1017,7 @@ public class Forge implements ApplicationListener {
Dscreens.clear(); Dscreens.clear();
graphics.dispose(); graphics.dispose();
SoundSystem.instance.dispose(); SoundSystem.instance.dispose();
MapStage.getInstance().disposeWorld();
try { try {
ExceptionHandler.unregisterErrorHandling(); ExceptionHandler.unregisterErrorHandling();
lastPreview.dispose(); lastPreview.dispose();

View File

@@ -135,6 +135,7 @@ public class MapStage extends GameStage {
private boolean freezeAllEnemyBehaviors = false; private boolean freezeAllEnemyBehaviors = false;
protected MapStage() { protected MapStage() {
disposeWorld();
gdxWorld = new World(new Vector2(0, 0),false); gdxWorld = new World(new Vector2(0, 0),false);
dialog = Controls.newDialog(""); dialog = Controls.newDialog("");
eventTouchDown = new InputEvent(); eventTouchDown = new InputEvent();
@@ -149,6 +150,16 @@ public class MapStage extends GameStage {
return instance == null ? instance = new MapStage() : instance; return instance == null ? instance = new MapStage() : instance;
} }
public void disposeWorld() {
if (gdxWorld != null) {
try {
gdxWorld.dispose();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void addMapActor(MapObject obj, MapActor newActor) { public void addMapActor(MapObject obj, MapActor newActor) {
newActor.setWidth(Float.parseFloat(obj.getProperties().get("width").toString())); newActor.setWidth(Float.parseFloat(obj.getProperties().get("width").toString()));
newActor.setHeight(Float.parseFloat(obj.getProperties().get("height").toString())); newActor.setHeight(Float.parseFloat(obj.getProperties().get("height").toString()));
@@ -252,7 +263,12 @@ public class MapStage extends GameStage {
dialog.getContentTable().add(L).width(250f); dialog.getContentTable().add(L).width(250f);
dialog.getButtonTable().add(Controls.newTextButton("OK", () -> { dialog.getButtonTable().add(Controls.newTextButton("OK", () -> {
hideDialog(); hideDialog();
fb.dispose(); Timer.schedule(new Timer.Task() {
@Override
public void run() {
fb.dispose();
}
}, 0.5f);
})).width(240f); })).width(240f);
dialog.setKeepWithinStage(true); dialog.setKeepWithinStage(true);
setDialogStage(GameHUD.getInstance()); setDialogStage(GameHUD.getInstance());
@@ -319,6 +335,7 @@ public class MapStage extends GameStage {
} }
public void loadMap(TiledMap map, String sourceMap, String targetMap, int spawnTargetId) { public void loadMap(TiledMap map, String sourceMap, String targetMap, int spawnTargetId) {
disposeWorld();
gdxWorld = new World(new Vector2(0, 0),false); gdxWorld = new World(new Vector2(0, 0),false);
isLoadingMatch = false; isLoadingMatch = false;
isInMap = true; isInMap = true;