zapamietanie aktualnego stanu jPanela podczas rysowania

0

Mam zamiar zrobic w javie gre waz. W tym celu stworzylem jPanel na ktorym bede malowal ogon weza zlozony z malych kwadracikow. Moje pytanie brzmi czy da sie w jakis sposob zapamietac aktualny stan namalowanego weza, aby za kazdym razem po wywolaniu metody repaint() nie musial rysowac go od poczatku tylko dorysowac brakujacy kwadracik i zamalowac ostatni?

0

nie musisz za każdym razem przemalowywać całego okna, wystarczy tylko te fragmenty, które uległy zmianie.

0

masz na mysli metode repaint z parametrami? Moze dobrze tego nie sprawdzilem ale mialem wrazenie ze cos w niej nie dziala i odstawilem ja na bok. W miedzyczasie napisalem swoja klase do rysowania kwadracikow stan panela zapamietujac w BufferedImage.

<code = java>
class Plansza extends JPanel {
private BufferedImage image;
private Color kolor;
private boolean putHead;
private String kier;
private Color[][] surface;
private boolean czyRysowac;
private int x, y;
private int rodzajKw;

public void paintComponent(Graphics g)	{
	super.paintComponent(g);
	Graphics2D g2 = (Graphics2D)g;
	Graphics2D gc;
	
	if (image == null) {
		image = (BufferedImage)(this.createImage(210,210));
		gc = image.createGraphics();
		gc.setColor(Color.white);
		gc.fillRect(0, 0, 210, 210);
		System.out.println("ha");
		
	}	else	{
		gc = image.createGraphics();
	}
	
	if (czyRysowac)
		if (putHead)	{
			//wyw proc do rys glowy
		}	else	{
			putSquare(image, gc);
			czyRysowac = false;
		}
		
	g2.drawImage(image, null, 0, 0);		
}

private void putSquare(BufferedImage image, Graphics2D g)		{
	g.setColor(kolor);
	g.fillRect(x*10, y*10, 9, 9);
}


public Plansza() {
	// TODO Auto-generated constructor stub
	surface = new Color[20][20];
	for (int i = 0; i < 20; i++) {
		for (int j = 0; j < surface[i].length; j++) {
			surface[i][j] = Color.white;
		}
	}
	czyRysowac = false;
}


public void rysujGlowe(int x, int y, Color kol, String kr)	{
	putHead = true;
	kier = kr;
	initRest(x, y, kol);
}

public void rysujKwadrat(int x, int y, Color kol, int rdz)	{
	putHead = false;
	rodzajKw = rdz;
	initRest(x, y, kol);
}

private void initRest(int xr, int yr, Color kol)	{
	czyRysowac = true;
	x = xr;
	y = yr;
	kolor = kol;
	repaint();
}

}


Po testowym wywolaniu metod rysujacych

<code = java>
plansza.rysujKwadrat(8, 9, Color.red, 0);
plansza.rysujKwadrat(8, 10, Color.red, 0);
plansza.rysujKwadrat(8, 11, Color.blue, 0);

Na panelu widac tylko ten ostatni

1 użytkowników online, w tym zalogowanych: 0, gości: 1