Object Serialization¶
LITIENGINE uses XML serialization for saving and loading game data, including resource bundles and configuration.
Built-in Serialization¶
The engine automatically handles:
.litidataresource bundlesconfig.propertiesconfiguration- Map data (.tmx format)
XmlUtilities¶
XML serialization utilities:
import de.gurkenlabs.litiengine.util.io.XmlUtilities;
import java.net.URL;
import java.nio.file.Path;
// Save JAXB object to XML file
Path savedPath = XmlUtilities.save(object, Path.of("saves/player.xml"));
// Load JAXB object from an XML URL (file or classpath resource)
URL fileUrl = Path.of("saves/player.xml").toUri().toURL();
PlayerData data = XmlUtilities.read(PlayerData.class, fileUrl);
Serializable Objects¶
Objects use standard Jakarta XML Binding annotations (jakarta.xml.bind):
import jakarta.xml.bind.annotation.XmlAttribute;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "playerData")
public class PlayerData {
@XmlAttribute
private String name;
@XmlElement
private int level;
@XmlElement
private int experience;
// Required public no-arg constructor
public PlayerData() {}
// Getters and setters...
}
Custom Save Data¶
import de.gurkenlabs.litiengine.util.io.XmlUtilities;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import java.nio.file.Path;
@XmlRootElement(name = "saveData")
@XmlAccessorType(XmlAccessType.FIELD)
public class SaveData {
@XmlElement
private String playerName;
@XmlElement
private int currentLevel;
// Required public no-arg constructor for JAXB
public SaveData() {}
public SaveData(String playerName, int currentLevel) {
this.playerName = playerName;
this.currentLevel = currentLevel;
}
public String getPlayerName() {
return playerName;
}
public void setPlayerName(String playerName) {
this.playerName = playerName;
}
public int getCurrentLevel() {
return currentLevel;
}
public void setCurrentLevel(int currentLevel) {
this.currentLevel = currentLevel;
}
public Path save(Path filePath) {
return XmlUtilities.save(this, filePath);
}
public static SaveData load(Path filePath) throws Exception {
return XmlUtilities.read(SaveData.class, filePath.toUri().toURL());
}
}
See Also¶
- Savegames - Game save system
- Configuration - Config files