Hallo,
Tijdens het maken van het spel bomberman ben ik tegen het volgende probleem aan gelopen maar ik heb na veel zoeken nogsteeds geen oplossing kunnen vinden.
Als ik het speelveld en alle spelers opnieuw teken dan loopt het spel niet snel genoeg. Dus teken ik alleen een rechthoek om de spelers om de 30 miliseconden opnieuw. Dit werkt helemaal prima met 1 speler en alles gaat dan 100% soepel.
Maar zodra ik meer spelers toevoeg en de repaint(Rectangle) methode dus heel snel achterelkaar aanroep..dan wordt de paintComponent methoden niet direct uitgevoerd maar pas na een aantal aanroepen van de repaint(Rectangle) methode. En de paintComponent tekent dan een grote rechthoek waar alle spelers in vallen. Dus als 1 speler helemaal linksbovenin staat en 1 speler rechtsonderin wordt het hele scherm opnieuw getekent en is het dus weer niet snel genoeg..
De output voor 2 spelers is dan
//Speler links bovenin
Should Redraw this = java.awt.Rectangle[x=10,y=10,width=100,height=100]
//Speler rechts onderin
Should Redraw this = java.awt.Rectangle[x=670,y=630,width=100,height=140]
//De rechthoek die daadwerkelijk getekend wordt
DOES Redraw this = java.awt.Rectangle[x=10,y=10,width=750,height=750]
Hoe kan ik dit oplossen ? er er een methode waarmee ik ervoor kan zorgen dat de paintComponent wel direct uitgevoerd wordt ? Ik heb al een heletijd op google gezocht en vanalles geprobeerd maar heb nog niks goeds kunnen vinden..
Iemand een idee ? Alvast bedankt..
Tijdens het maken van het spel bomberman ben ik tegen het volgende probleem aan gelopen maar ik heb na veel zoeken nogsteeds geen oplossing kunnen vinden.
Als ik het speelveld en alle spelers opnieuw teken dan loopt het spel niet snel genoeg. Dus teken ik alleen een rechthoek om de spelers om de 30 miliseconden opnieuw. Dit werkt helemaal prima met 1 speler en alles gaat dan 100% soepel.
Maar zodra ik meer spelers toevoeg en de repaint(Rectangle) methode dus heel snel achterelkaar aanroep..dan wordt de paintComponent methoden niet direct uitgevoerd maar pas na een aantal aanroepen van de repaint(Rectangle) methode. En de paintComponent tekent dan een grote rechthoek waar alle spelers in vallen. Dus als 1 speler helemaal linksbovenin staat en 1 speler rechtsonderin wordt het hele scherm opnieuw getekent en is het dus weer niet snel genoeg..
Java:
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
| //Paint component methode public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D)g; this.drawField(g2d,true); this.drawPlayers(g2d); Rectangle r = new Rectangle(g.getClipBounds().x, g.getClipBounds().y, g.getClipBounds().width, g.getClipBounds().height); System.out.println("DOES Redraw this = " + r.toString()); } //Aangeroepen om de 30 miliseconden.. private void Redraw() { //Draw players for(Player player :this.field.getPlayers()) { Rectangle rect = getPlayerIntersectionRectangle(player); System.out.println("Should Redraw this = " + rect.toString()); repaint(rect); } } |
De output voor 2 spelers is dan
//Speler links bovenin
Should Redraw this = java.awt.Rectangle[x=10,y=10,width=100,height=100]
//Speler rechts onderin
Should Redraw this = java.awt.Rectangle[x=670,y=630,width=100,height=140]
//De rechthoek die daadwerkelijk getekend wordt
DOES Redraw this = java.awt.Rectangle[x=10,y=10,width=750,height=750]
Hoe kan ik dit oplossen ? er er een methode waarmee ik ervoor kan zorgen dat de paintComponent wel direct uitgevoerd wordt ? Ik heb al een heletijd op google gezocht en vanalles geprobeerd maar heb nog niks goeds kunnen vinden..
Iemand een idee ? Alvast bedankt..