Java 从我的关卡编辑器中保存平铺精灵的好方法是什么?

Java 从我的关卡编辑器中保存平铺精灵的好方法是什么?,java,Java,我已经用java构建了一个基于tile的级别编辑器,它即将完成,但是当我编写保存级别的方法时,我所有的磁贴都是图像精灵,我不知道如何保存它们,以便实际游戏可以读取它们,而无需将每个磁贴制作为自己的图像文件,然后我需要导入到真实游戏中读取。(可能有700多块瓷砖,一个级别可能会使用其中的100块) 我想问大家:保存所有这些瓷砖的最佳方法是什么?我熟悉将内容保存到文本文件,但我无法以相同的方式保存这些图像。是否有办法保存该级别,以便将基于文本的信息保存在与平铺精灵相同的位置 这是我的tile类,以及

我已经用java构建了一个基于tile的级别编辑器,它即将完成,但是当我编写保存级别的方法时,我所有的磁贴都是图像精灵,我不知道如何保存它们,以便实际游戏可以读取它们,而无需将每个磁贴制作为自己的图像文件,然后我需要导入到真实游戏中读取。(可能有700多块瓷砖,一个级别可能会使用其中的100块)

我想问大家:保存所有这些瓷砖的最佳方法是什么?我熟悉将内容保存到文本文件,但我无法以相同的方式保存这些图像。是否有办法保存该级别,以便将基于文本的信息保存在与平铺精灵相同的位置

这是我的tile类,以及迄今为止我在save方法方面所拥有的

    public class Tile {
     int x, y, w, h, type;
     BufferedImage layer1Image;
     BufferedImage layer2Image;
     BufferedImage layer3Image;
     BufferedImage layer4Image;
     boolean walkable;

     public Tile(int x, int y, int w, int h) {
      walkable = false;
      this.x = x;
      this.y = y;
      this.w = w;
      this.h = h;
      type = 0;
      layer1Image = null;
      layer2Image = null;
      layer3Image = null;
      layer4Image = null;
     }

     public Tile() {

     }

     public int getX() {
      return x;
     }

     public int getY() {
      return y;
     }

     public int getW() {
      return w;
     }

     public int getH() {
      return h;
     }

     public void setX(int newX) {
      x = newX;
     }

     public void setY(int newY) {
      y = newY;
     }

     public void setW(int newW) {
      w = newW;
     }

     public void setH(int newH) {
      h = newH;
     }

     public boolean mouseOver(int mouseX, int mouseY) {
      if (mouseX > x && mouseX < x + w && mouseY > y && mouseY < y + h) {
       return true;
      }
      return false;
     }

     public int getType() {
      return type;
     }

     public boolean getWalkable() {
      return walkable;
     }

     public BufferedImage getLayer1Image() {
      return layer1Image;
     }

     public BufferedImage getLayer2Image() {
      return layer2Image;
     }

     public BufferedImage getLayer3Image() {
      return layer3Image;
     }

     public BufferedImage getLayer4Image() {
      return layer4Image;
     }

     public void clearImages() {
      layer1Image = null;
      layer2Image = null;
      layer3Image = null;
      layer4Image = null;
      walkable = true;
     }

     public void setImage(BufferedImage image, int layer) {
      switch (layer) {
      case 0:
       layer1Image = image;
       break;
      case 1:
       layer2Image = image;
       break;
      case 2:
       layer3Image = image;
      case 3:
       layer4Image = image;
      }
     }

     public void display(Graphics g, int x, int y, int w, int h, int zoom) {
      g.setColor(Color.BLACK);
      g.drawImage(layer1Image, x, y, w, h, null);
      g.drawImage(layer2Image, x, y, w, h, null);
      g.drawImage(layer3Image, x, y, w, h, null);
      g.drawImage(layer4Image, x, y, w, h, null);
      g.drawRect(x, y, w, h);

     }

     public void getAttributes(Tile tile) {
      layer1Image = tile.getLayer1Image();
      layer2Image = tile.getLayer2Image();
      layer3Image = tile.getLayer3Image();
      layer4Image = tile.getLayer4Image();
      x = tile.getX();
      y = tile.getY();
      w = tile.getW();
      h = tile.getH();
      walkable = tile.getWalkable();
      type = tile.getType();

     }

     public void setWalkable(boolean b) {
      walkable = b;
     }



          //  Here is the save, its in a different class in case my formatting in the post is screwy






        public void doSaveAsText() {
      if (fileDialog == null) {
       fileDialog = new JFileChooser();
      }
      File selectedFile;
      if (editFile == null) {
       selectedFile = new File("levelData.txt");
      } else {
       selectedFile = new File(editFile.getName());
      }
      fileDialog.setSelectedFile(selectedFile);
      fileDialog.setDialogTitle("Select File to be Saved");
      int option = fileDialog.showSaveDialog(this);
      if (option != JFileChooser.APPROVE_OPTION) {
       return;
      }
      selectedFile = fileDialog.getSelectedFile();
      if (selectedFile.exists()) {
       int response = JOptionPane.showConfirmDialog(this, "Already exists, overwrite?", "Confirm Save", JOptionPane.YES_NO_OPTION,
         JOptionPane.WARNING_MESSAGE);
       if (response != JOptionPane.YES_OPTION) {
        return;
       }

      }
      PrintWriter out;
      try{
       FileWriter stream = new FileWriter(selectedFile);
       out = new PrintWriter(stream);
      } catch (Exception e){
       JOptionPane.showMessageDialog(this, "error");
       return;
      }
      try{
       out.println("LevelEditor v1.0");
       for(int i = 0; i < mapPanel.tilesList.size(); i++){
        Tile currentTile = mapPanel.tilesList.get(i);
        out.println("startTile");
        out.println("" + currentTile.getX());
        out.println("" + currentTile.getY());
        out.println("" + currentTile.getW());
        out.println("" + currentTile.getH());
        out.println("" + currentTile.getWalkable());

        out.println("endTile");
       }
       out.close();
      }catch(Exception e){
       System.exit(0);
      }

     }



Any suggestions would be great
公共类平铺{
int x,y,w,h,type;
缓冲图像层1图像;
缓冲图像层2图像;
缓冲图像层3图像;
缓冲图像层4图像;
布尔可行走;
公共地砖(整块x、整块y、整块w、整块h){
可行走=错误;
这个.x=x;
这个。y=y;
这个.w=w;
这个,h=h;
类型=0;
layer1Image=null;
layer2Image=null;
layer3Image=null;
layer4Image=null;
}
公共瓷砖(){
}
公共int getX(){
返回x;
}
公共int getY(){
返回y;
}
公共int getW(){
返回w;
}
公共int getH(){
返回h;
}
公共void setX(int newX){
x=newX;
}
公共空间设置(int newY){
y=新的;
}
公共无效setW(int newW){
w=新w;
}
公共空间塞斯(内西){
h=新h;
}
公共布尔mouseOver(int-mouseX,int-mouseY){
if(mouseX>x&&mouseXy&&mouseY
您只需将整个层次结构更高的Java对象保存到一个输出流中,并在稍后阶段加载它们即可


.

检查序列化API,或者只提取字节并从中生成十六进制字符串。

如何将
buffereImage
封装到包含特定图像引用的
TileImage
类中,然后您可以在保存文件中输出图像引用。这样您就不必保存im了一次又一次地更新年龄数据,并更新图形