Bildfehler beim schnellen neuzeichnen

  • Themenstarter Themenstarter alex_
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
A

alex_

Gast
hi,

ich bin dabei ein spielchen zu programmieren, (ich glaube es heißt thron) egal, es geht darum dass der spieler eine farbige linie auf dem bildschirm steuert. soweit klappt alles, jedoch entstehen ungewünschte und ziemlich störende Effekte wenn das Programm die linien neuzeichnet. Das geschieht alle 10 millisekunden.

hier ist die paint-methode:
Code:
	public void paint(Graphics g) { //------------------------PAINT------------------
			Graphics2D g_2D = (Graphics2D) g;
			switch (spieler1.direction) {
				case 0 :
					spieler1.posX++;
					break;
				case 1 :
					spieler1.posY--;
					break;
				case 2 :
					spieler1.posX--;
					break;
				case 3 :
					spieler1.posY++;
					break;
			}
			if (spieler1.posX < 0
				|| spieler1.posY < 0
				|| spieler1.posX >= 900
				|| spieler1.posY >= 700
				|| 0 < matrix[spieler1.posX][spieler1.posY]) {
				System.out.println("Spieler1 hat verloren!");
				count.interrupt();
			}
			matrix[spieler1.posX][spieler1.posY] = 1;
			g.setColor(Color.RED);
			spieler1.koords.setBack();
			Koord last = (Koord) spieler1.koords.getNext();
			g_2D.draw(
				new Line2D.Float(spieler1.posX, spieler1.posY, last.x, last.y));
			while (spieler1.koords.hasNext()) {
				Koord akt = (Koord) spieler1.koords.getNext();
				g_2D.draw(new Line2D.Float(akt.x, akt.y, last.x, last.y));
				last = akt;
			}
		} //----------------------------------------------------end-of-PAINT--------------
edit: Code Tags! becstift
 
Benutz bitte die Code-Tags. Erleichtern das Lesen deines Code.

1. Das was du suchst nennt sich Double-Buffering
Hier stand irgendwo was genaures dazu:
http://javacooperation.gmxhome.de/LinksDeu.html

Dabei wird alles zuerst auf ein "Bild" gezeichnet und wenn alles gezeichnet worden ist wird dieses "Bild" dann auf dem Bildschirm gezeichnet.

2. Es ist nicht unbedingt ratsam die Verarbeitung der Daten in die Paint-Methode zu packen. Besser ist es die in eine eigene Methode auszulagern oder sogar das ganze so zu programmieren, dass sich Objekte selbst zeichnen.

EDIT:
Eine Suche hier im Forum "Double-Buffering" hilft sicherlich auch weiter.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben