0

タイルのマップを保存およびロードするための次のコードがあります。

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)

何か助けはありますか?

4

1 に答える 1

0

これは、定数を使用するのに適した事例です。一定にする:

final String X = "X";
final String Y = "Y";

次に、小文字の「x」を使用した「保存」と大文字の「X」を使用した読み取りの場合は回避されます。

つまり、「x」は「X」と同じ属性ではありません。

ロルフ

于 2012-12-31T22:35:47.650 に答える