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
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