# Bilder speichern



## Heiland (5. Mrz 2005)

Hallo!

Ich hab folgendes Problem:

In meinem Level Editor für einen Lemmings Clon habe ich ein Raster mit vielen Quadratischen Kacheln. Diese Kacheln kann ich nun mit verschiedenen Kacheln besetzen. Doch genau da ist das Problem. Wenn ich durch einen Klick das Bild male und nun irgendwo anders eine Kachel bestücke, dann verschwindet das vorherige. Ich habe mir einen Algoryhtmus zum Speichern der Bilder geschrieben, doch der funktioniert leider nicht wirklich! Hat jemand von euch eine Idee, wie sowas aussehen könnte? Auf wunsch schicke ich mal den Code.

Gruß, JaVa


----------



## Wildcard (5. Mrz 2005)

Du musst alle Veränderungen die du machst in einer Datenstruktur festhalten, und diese zum zeichnen verwenden.


----------



## Heiland (6. Mrz 2005)

Ja, sowas habe ich schon versucht! Das hier ist jetzt glaub ich men 30er Versuch, aber die Bilder wollen einfach nicht gespeichert werden:


```
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import java.io.*;

public class LevelViewer extends JPanel
{
  int levelWidth;
  int levelHeight;
  int mouseXPos;
  int mouseYPos;
  int tileXPos;
  int tileYPos;
  int tileX;
  int tileY;
  int tileXCopy;
  int tileYCopy;
  int index = 1;
  int indexCount = 0;
  int newCount;
  Image newImage;
  String[] imageSave;
  String imageString;
  String imageString2;
  int imageString2length;
  Image[][] imageCopy;
 
  public LevelViewer(int levelWidth, int levelHeight) 
  {
  	 this.levelWidth = levelWidth;
     this.levelHeight = levelHeight;
     this.setBackground(Color.BLACK);
     //imageCopy = new Image[levelWidth][levelHeight];
     this.addMouseListener(new MouseAdapter()
     {
     	public void mouseClicked(MouseEvent mse)
     	{
     		mouseXPos = mse.getX();
     		mouseYPos = mse.getY();
     		tileXPos = mouseXPos/50;
     		tileYPos = mouseYPos/50;
     		System.out.println(tileXPos);
     		System.out.println(tileYPos);
     		//tileXCopy = 0;
     		//tileYCopy = 0;
     		imageCopy[tileXPos][tileYPos] = Toolkit.getDefaultToolkit().createImage(imageString2);
     		//tileXCopy =+ 1;
     		//tileYCopy =+ 1;
     		repaint();
     	}
     });
     this.addMouseMotionListener(new MouseMotionAdapter()
     {
     	public void mouseMoved(MouseEvent mse)
     	{
     		mouseXPos = mse.getX();
  	   		mouseYPos  = mse.getY();
  			getTileSourceX();
  			getTileSourceY();
  			//repaint();
     	}
     });
  }
  
  public int getNewCount()
  {
  	newCount = indexCount;
  	return newCount;
  }
  
  public void getImageString()
  {
  	System.out.println(imageString2);
  	imageString2length = imageString2.length();
  }
  
  public void setTileImage(String imageString)
  {
  	newImage = Toolkit.getDefaultToolkit().createImage(imageString);
  	imageString2 = imageString;
  }
  
  public void setLevelSize(int newWidth, int newHeight)
  {
  	levelWidth = newWidth;
  	levelHeight= newHeight;
  	imageCopy = new Image[levelWidth][levelHeight];
  	repaint();
  }
  
  public int getTileSourceX()
  {
  	tileXPos = mouseXPos/50;
  	tileX = tileXPos * 50;
  	return tileX;
  }
  
  public int getTileSourceY()
  {
  	tileYPos = mouseYPos/50;
  	tileY = tileYPos * 50;
  	return tileY;
  }
 
  public void paintComponent(Graphics g)
  {
  	 super.paintComponent(g);
  	 g.setColor(Color.BLUE);
  	 g.clipRect(0 ,0, levelWidth * 50 + 1, levelHeight * 50 + 1);
  	 
  	 for (int i=0; i<levelWidth + 1; i++)
  	 {
  	 	g.drawLine(i * 50 ,0 ,i * 50, this.getHeight());
  	 }
  	 for (int y=0; y<levelHeight + 1; y++)
  	 {
  	 	g.drawLine(0, y * 50,this.getWidth(), y * 50);
  	 }
  	 //g.drawImage(newImage, tileX, tileY, null);
  	 //int count = getNewCount();
  	 for(int a=0; a<levelWidth; a++)
  	 {
  	 	for(int b=0; b<levelHeight; b++)
  	 	{
  	 		if(imageCopy[a][b] != null)
  	 		{
  	 			g.drawImage(imageCopy[a][b], tileXPos*50, tileYPos*50, null);
  	 		}
  	 	}
  	 }
  	
  	 	//g.drawImage(imageCopy[tileXCopy][tileYCopy], tileXCopy, tileYCopy, null);
  	 	//System.out.println("COUNTER: "+count);
  	 	//System.out.println("A      : "+a);
  	
  	 
  }
  
     
  
  public Dimension getPreferredSize()
  {
  	return new Dimension (levelWidth * 50 + 1, levelHeight * 50 + 1);
  }
}
```


----------



## Wildcard (6. Mrz 2005)

Hab deinen code jetzt nur überflogen, aber müsste das:

```
for(int a=0; a<levelWidth; a++) 
      { 
         for(int b=0; b<levelHeight; b++) 
         { 
            if(imageCopy[a][b] != null) 
            { 
               g.drawImage(imageCopy[a][b], tileXPos*50, tileYPos*50, null); 
            } 
         } 
      }
```

nicht so aussehen:

```
for(int a=0; a<levelWidth; a++) 
      { 
         for(int b=0; b<levelHeight; b++) 
         { 
            if(imageCopy[a][b] != null) 
            { 
               g.drawImage(imageCopy[a][b], a*50, b*50, null); 
            } 
         } 
      }
```
?


----------

