Cześć,
mam pewien problem z używaniem procedury repaint() w pętli. Otóż w momencie, kiedy wrzucam w programie repaint() do pętli for, to zamiast wykonywać się on n razy, wykonuje się tylko raz. Kody źródłowe potrzebne do analizy wrzucam poniżej:
public class paintWorld extends JPanel {
//procedura przechwytujaca wcisniety przycisk
void catchKeyPressed()
{
//Sztuczny timer
if(mainCharacter.moves == 0)
{
mainCharacter.moves = 1; //Ustawiam flage, ze postac sie rusza
for (int i=0; i<32; i++)
{
try
{
System.out.println(i);
Thread.sleep(5);
mainCharacter.moveCharacter(widthOfMap, heigthOfMap);
repaint();
} catch (Exception e)
{
e.printStackTrace();
}
}
}
}
@Override
protected void paintComponent(Graphics g)
{
System.out.println("Leci repaint");
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
widthOfMap = world.getMapWidth();
heigthOfMap = world.getMapHeigth();
BufferedImage worldImage = new BufferedImage(widthOfMap*32, heigthOfMap*32, 2);
Graphics paintWorldImage = worldImage.getGraphics();
[...]
mainCharacter.moves = 0;
}
}
Wrzuciłem sobie System.out.println w celu sprawdzenia, czy repaint rzeczywiście wchodzi do paintComponent i z logów wyszło takie coś:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Leci repaint
Ma ktoś może pomysł dlaczego tak się dzieje, że procedura ta jest uruchamiana tylko raz, a nie tak jak jest to w kodzie programu 32 razy?