タイルのマップを保存およびロードするための次のコードがあります。
public void load(File loadFile) {
try {
SAXBuilder builder = new SAXBuilder();
Document document = builder.build(loadFile);
Element root = document.getRootElement();
for (Object tiles : root.getChildren()) {
Element e = (Element) tiles;
int x = Integer.parseInt(e.getAttributeValue("X"));
int y = Integer.parseInt(e.getAttributeValue("Y"));
worldTiles[x][y] = new Tile(tile.id, new Vector2f(x
* Tile.TILE_WIDTH, y * Tile.TILE_HEIGHT));
}
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void save(File saveFile) {
Document document = new Document();
Element root = new Element("blocks");
document.setRootElement(root);
for (int x = 0; x < TILE_WIDTH - 1; x++) {
for (int y = 0; y < TILE_HEIGHT - 1; y++) {
Element tiles = new Element("block");
tiles.setAttribute("x",
String.valueOf((int) (worldTiles[x][y].getX())));
tiles.setAttribute("y",
String.valueOf((int) (worldTiles[x][y].getY())));
tiles.setAttribute("type",
String.valueOf(worldTiles[x][y].getType()));
root.addContent(tiles);
}
}
XMLOutputter output = new XMLOutputter();
try {
output.output(document, new FileOutputStream(saveFile));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
次に、入力ハンドラーで次のようにコードを呼び出します。
if(Keyboard.isKeyDown(Keyboard.KEY_F)){
world.save(new File("save.xml"));
}
if(Keyboard.isKeyDown(Keyboard.KEY_G)){
world.load(new File("save.xml"));
}
ただし、nullpointer 例外が発生します。正直なところ、ロードしようとする前に保存ファイルを作成しているので、これは意味がないので、それは問題ではありません. worldTile[][] 配列にタイルがあるため、そこでエラーをスローできませんでした。追加情報として、Tile コンストラクターは次のようになります。
public Tile(int id, Vector2f position)
何か助けはありますか?