⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlmapwriter.java

📁 tiled地图编辑器是2d的,很不错的国外软件,使用起来很方便的
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* *  Tiled Map Editor, (c) 2004-2006 * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  Adam Turk <aturk@biggeruniverse.com> *  Bjorn Lindeijer <b.lindeijer@xs4all.nl> */package tiled.io.xml;import java.awt.Color;import java.awt.Image;import java.awt.Rectangle;import java.io.*;import java.util.Enumeration;import java.util.Iterator;import java.util.Properties;import java.util.Vector;import java.util.prefs.Preferences;import java.util.zip.GZIPOutputStream;import tiled.core.*;import tiled.io.ImageHelper;import tiled.io.MapWriter;import tiled.io.PluginLogger;import tiled.mapeditor.selection.SelectionLayer;import tiled.util.Base64;import tiled.util.TiledConfiguration;/** * @version $Id: XMLMapWriter.java 688 2006-07-08 11:55:38Z bjorn $ */public class XMLMapWriter implements MapWriter{    private static final int LAST_BYTE = 0x000000FF;    /**     * Saves a map to an XML file.     *     * @param filename the filename of the map file     */    public void writeMap(Map map, String filename) throws Exception {        OutputStream os = new FileOutputStream(filename);        if (filename.endsWith(".tmx.gz")) {            os = new GZIPOutputStream(os);        }        Writer writer = new OutputStreamWriter(os);        XMLWriter xmlWriter = new XMLWriter(writer);        xmlWriter.startDocument();        writeMap(map, xmlWriter, filename);        xmlWriter.endDocument();        writer.flush();        if (os instanceof GZIPOutputStream) {            ((GZIPOutputStream)os).finish();        }    }    /**     * Saves a tileset to an XML file.     *     * @param filename the filename of the tileset file     */    public void writeTileset(TileSet set, String filename) throws Exception {        OutputStream os = new FileOutputStream(filename);        Writer writer = new OutputStreamWriter(os);        XMLWriter xmlWriter = new XMLWriter(writer);        xmlWriter.startDocument();        writeTileset(set, xmlWriter, filename);        xmlWriter.endDocument();        writer.flush();    }    public void writeMap(Map map, OutputStream out) throws Exception {        Writer writer = new OutputStreamWriter(out);        XMLWriter xmlWriter = new XMLWriter(writer);        xmlWriter.startDocument();        writeMap(map, xmlWriter, "/.");        xmlWriter.endDocument();        writer.flush();    }    public void writeTileset(TileSet set, OutputStream out) throws Exception {        Writer writer = new OutputStreamWriter(out);        XMLWriter xmlWriter = new XMLWriter(writer);        xmlWriter.startDocument();        writeTileset(set, xmlWriter, "/.");        xmlWriter.endDocument();        writer.flush();    }    private static void writeMap(Map map, XMLWriter w, String wp) throws IOException {        w.startElement("map");        w.writeAttribute("version", "0.99b");        switch (map.getOrientation()) {            case Map.MDO_ORTHO:                w.writeAttribute("orientation", "orthogonal"); break;            case Map.MDO_ISO:                w.writeAttribute("orientation", "isometric"); break;            case Map.MDO_OBLIQUE:                w.writeAttribute("orientation", "oblique"); break;            case Map.MDO_HEX:                w.writeAttribute("orientation", "hexagonal"); break;            case Map.MDO_SHIFTED:                w.writeAttribute("orientation", "shifted"); break;        }        w.writeAttribute("width", map.getWidth());        w.writeAttribute("height", map.getHeight());        w.writeAttribute("tilewidth", map.getTileWidth());        w.writeAttribute("tileheight", map.getTileHeight());        writeProperties(map.getProperties(), w);        int firstgid = 1;        Iterator itr = map.getTilesets().iterator();        while (itr.hasNext()) {            TileSet tileset = (TileSet)itr.next();            tileset.setFirstGid(firstgid);            writeTilesetReference(tileset, w, wp);            firstgid += tileset.getMaxTileId();        }        Iterator ml = map.getLayers();        while (ml.hasNext()) {            MapLayer layer = (MapLayer)ml.next();            writeMapLayer(layer, w);        }        w.endElement();    }    private static void writeProperties(Properties props, XMLWriter w) throws            IOException    {        if (!props.isEmpty()) {            w.startElement("properties");            for (Enumeration keys = props.keys(); keys.hasMoreElements();) {                String key = (String)keys.nextElement();                w.startElement("property");                w.writeAttribute("name", key);                w.writeAttribute("value", props.getProperty(key));                w.endElement();            }            w.endElement();        }    }    /**     * Writes a reference to an external tileset into a XML document.  In the     * degenerate case where the tileset is not stored in an external file,     * writes the contents of the tileset instead.     */    private static void writeTilesetReference(TileSet set, XMLWriter w, String wp)        throws IOException {        String source = set.getSource();        if (source == null) {            writeTileset(set, w, wp);        } else {            w.startElement("tileset");            try {                w.writeAttribute("firstgid", set.getFirstGid());                w.writeAttribute("source", source.substring(                            source.lastIndexOf(File.separatorChar) + 1));                if (set.getBaseDir() != null) {                    w.writeAttribute("basedir", set.getBaseDir());                }            } finally {                w.endElement();            }        }    }    private static void writeTileset(TileSet set, XMLWriter w, String wp)        throws IOException {        String tilebmpFile = set.getTilebmpFile();        String name = set.getName();        w.startElement("tileset");        if (name != null) {            w.writeAttribute("name", name);        }        w.writeAttribute("firstgid", set.getFirstGid());        if (tilebmpFile != null) {            w.writeAttribute("tilewidth", set.getTileWidth());            w.writeAttribute("tileheight", set.getTileHeight());            int tileSpacing = set.getTileSpacing();            if (tileSpacing != 0) {                w.writeAttribute("spacing", tileSpacing);            }        }        if (set.getBaseDir() != null) {            w.writeAttribute("basedir", set.getBaseDir());        }        if (tilebmpFile != null) {            w.startElement("image");            w.writeAttribute("source", getRelativePath(wp, tilebmpFile));            Color trans = set.getTransparentColor();            if (trans != null) {                w.writeAttribute("trans", Integer.toHexString(                            trans.getRGB()).substring(2));            }            w.endElement();            // Write tile properties when necessary.            Iterator tileIterator = set.iterator();            while (tileIterator.hasNext()) {                Tile tile = (Tile) tileIterator.next();                // todo: move the null check back into the iterator?                if (tile != null && !tile.getProperties().isEmpty()) {                    w.startElement("tile");                    w.writeAttribute("id", tile.getId());                    writeProperties(tile.getProperties(), w);                    w.endElement();                }            }        } else {            // Embedded tileset            Preferences prefs = TiledConfiguration.node("saving");            boolean embedImages = prefs.getBoolean("embedImages", true);            boolean tileSetImages = prefs.getBoolean("tileSetImages", false);            if (tileSetImages) {                Enumeration ids = set.getImageIds();                while (ids.hasMoreElements()) {                    String id = (String)ids.nextElement();                    w.startElement("image");                    w.writeAttribute("format", "png");                    w.writeAttribute("id", id);                    w.startElement("data");                    w.writeAttribute("encoding", "base64");                    w.writeCDATA(new String(Base64.encode(                                    ImageHelper.imageToPNG(                                        set.getImageById(Integer.parseInt(id))))));                    w.endElement();                    w.endElement();                }            } else if (!embedImages) {                String imgSource =                        prefs.get("tileImagePrefix", "tile") + "set.png";                w.startElement("image");                w.writeAttribute("source", imgSource);                String tilesetFilename = wp.substring(0,                        wp.lastIndexOf(File.separatorChar) + 1) + imgSource;                FileOutputStream fw = new FileOutputStream(new File(                            tilesetFilename));                //byte[] data = ImageHelper.imageToPNG(setImage);                //fw.write(data, 0, data.length);                w.endElement();                fw.close();            }            // Check to see if there is a need to write tile elements            Iterator tileIterator = set.iterator();            boolean needWrite = !set.isOneForOne();            if (embedImages) {                needWrite = true;            } else {                // As long as one has properties, they all need to be written.                // TODO: This shouldn't be necessary                while (tileIterator.hasNext()) {                    Tile tile = (Tile)tileIterator.next();                    if (!tile.getProperties().isEmpty()) {                        needWrite = true;                        break;                    }                }            }            if (needWrite) {                tileIterator = set.iterator();                while (tileIterator.hasNext()) {                    Tile tile = (Tile)tileIterator.next();                    // todo: move this check back into the iterator?                    if (tile != null) {                        writeTile(tile, w);                    }                }            }        }        w.endElement();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -