Witam
Robię grę czołgi, jednak utknąłem na wyświetlaniu obrazu.
Moja klasa graj, która odpalam z głównej klasy po nacisnieciu przycisku:
import java.awt.*;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.awt.event.KeyListener;
import java.awt.Dimension;
import javax.swing.*;
/**
*
* @author Kamil
*/
public class graj extends Canvas implements KeyListener{
JFrame ramka;
map mapka = new map();
JPanel panel;
sciana2 scianka = new sciana2();
sciana1 scianka2 = new sciana1();
mapa[] mapy= new mapa[3];
gracz gracz1 = new gracz();
int x =0,y=20,z=1000;
aktpanel panele = new aktpanel();
// sciana1 scianka2 = new sciana1();
public graj()
{
ramka = new JFrame();
// scianka=(sciana1) scianka;
mapy[0]=new mapa();
mapy[0].dodaj_element1(1,1);
mapy[0].dodaj_element1(2,2);
mapy[0].dodaj_element1(3,3);
mapy[0].dodaj_element1(4,4);
panel = new JPanel();
ramka.setResizable(false);
ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ArrayList<JLabel> zycia = new ArrayList<JLabel>();
panel.setLayout(null);
zycia.add(new JLabel("Ilość żyć: "));
zycia.add(new JLabel(Integer.toString(x)));
zycia.add(new JLabel("Ilość pozostałych przeciwników: "));
zycia.add(new JLabel(Integer.toString(y)));
zycia.add(new JLabel("Punkty: "));
zycia.add(new JLabel(Integer.toString(z)));
panel.add(zycia.get(0));
panel.add(zycia.get(1));
panel.add(zycia.get(2));
panel.add(zycia.get(3));
panel.add(zycia.get(4));
panel.add(zycia.get(5));
ramka.getContentPane().add(BorderLayout.EAST,panele);
ramka.getContentPane().add(BorderLayout.EAST,panel);
ramka.getContentPane().add(mapka);
ramka.setSize(640,480);
ramka.setVisible(true);
ramka.addKeyListener(this);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {}
gracz1.ruch();
ramka.repaint();
}
public void keyPressed(KeyEvent e) {
gracz1.keyPressed(e);
}public void keyReleased(KeyEvent e) {
gracz1.keyReleased(e);
}
public void keyTyped(KeyEvent e) {}
class map extends JPanel
{
public void paintComponent(Graphics g)
{
g.setColor(Color.black);
g.fillRect(0,0,440,440);
Image obrazek = new ImageIcon("wall2.jpg").getImage();
for(int k=0;k<mapy[0].i;k++)
g.drawImage(mapy[0].sciany1[k].obrazek,(mapy[0].sciany1[k].x)*20,(mapy[0].sciany1[k].x)*20,this);
g.drawImage(gracz1.czolg,(gracz1.x),(gracz1.y), this);
g.setColor(Color.red);
g.drawString("KUTAS", 440, 400);
repaint();
paint(g);
//g.drawImage(mapy[0].sciany1[0].obrazek, 0,0,this);
// g.drawImage(scianka2.obrazek,20,0,this);
}
}
}
Problemem jest odświeżanie obrazu, jeśli zrobią pętlę, w której wywołuję repaint okno jest białe, i dopiero na koniec pętli wyświetla końcowy rezultat. Mógłby ktoś podpowiedzieć w jaki sposób to wszystko rysować przez cały okres trwania gry?
Dziękuje i Pozdrawiam